2013-11-09 94 views
1

請參閱下圖 - 在我的數據庫中,我有3列,我有興趣通過我的窗體顯示結果。在這個例子中,我從數據庫中選擇了「Spaghetti Meatballs」配方,並點擊了Retrieve按鈕,然後發生了什麼是我放在右邊的兩個文本框將填充,一個是配料,另一個是步驟烹飪。請忽略我暫時存儲數據的方法,因爲這不是我當前的問題。Windows窗體打開新窗體以顯示數據

問題

,我想,我可以顯示從下拉菜單中儘管不是很漂亮關聯到用戶選擇的基本信息的感工作的基本功能。然而,我想要的是,當用戶點擊檢索按鈕時,將彈出一個新窗口並顯示該配方的標題,圖片,配料和步驟。現在,我已經爲名爲Pop_up.cs的項目添加了一個新窗體,但是我不確定如何將「檢索」方法更改爲首先顯示該窗體,然後填充將放置在該窗體上的文本框/圖片框用form1中的用戶指定的數據格式化並從我的數據庫中檢索。

檢索方法

//R E T R I E V E  B U T T O N 
     private void button3_Click(object sender, EventArgs e) 
     { 

      DataTable dataTable = dset.Tables[0]; 

      if (pictureBox2.Image != null) 
      { 
       pictureBox2.Image.Dispose(); 
      } 

      FileStream FS1 = new FileStream("image.jpg", FileMode.Create); 

      foreach (DataRow dataRow in dataTable.Rows) 
      { 

       if (dataRow[0].ToString() == comboBox1.SelectedItem.ToString()) 
       { 

        byte[] blob = (byte[])dataRow[1]; 
        FS1.Write(blob, 0, blob.Length); 
        FS1.Close(); 
        FS1 = null; 
        label5.Text = dataRow[3].ToString(); 
        label6.Text = dataRow[2].ToString(); 
        pictureBox2.Image = Image.FromFile("image.jpg"); 
        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage; 
        pictureBox2.Refresh(); 
       } 
      } 
     } 

enter image description here

+0

你哇nt在新的表單上顯示食譜信息的權利?如果我錯了,請糾正我。 –

+0

首先,我將創建一個食譜類,使代碼更具可讀性。然後,當用戶選擇一個配方時,我會實例化一個配方對象,然後將該配方作爲參數發送給新的Form2。 – user1646737

+0

@Sudhakar是的,圖像右下角的所有內容,即圖片,說明和配料需要在新窗口中打開 – JsonStatham

回答

2

修改POP_UP類的構造函數取一個參數。和寫一個FillData()方法來從數據庫

public partial class Pop_up : Form 
    { 
     public Pop_up(string recipe) 
     { 
      InitializeComponent(); 
      FillData(recipe); 

     } 
    } 

在Retrive按鈕的代碼顯示POP_UP加載配方數據。傳遞Receipe名作爲參數

//R E T R I E V E  B U T T O N 
    private void button3_Click(object sender, EventArgs e) 
    { 
     string recipeName = comboBox1.SelectedItem.ToString(); 
     Pop_up p = new Pop_up(recipeName); 
     p.Show(); 
    } 
+0

我會將pop_up類的構造函數添加到我的form1.cs中嗎? – JsonStatham

+0

我不確定我是否理解你的問題。你問過關於FillData方法嗎? – gawicks

+0

當您引用Pop_up類時,是否指我想要打開的其他表單?如果是這樣,爲什麼我將我的表單實例化爲'p'?請原諒我的無知 – JsonStatham

1

假設Pop_up.cs具有以下控件

PictureBox pictureBox; 
Label labelIngredients; 
Label labelCookSteps; 

然後Pop_up.cs可能看起來像:

public partial class Pop_up : Form 
{ 
    public Pop_up() 
    { 
     InitializeComponent();   
    } 

    public Pop_up(string recipeName, DataSet dset) 
    { 
     InitializeComponent(); 
     BindDataContext(recipeName, dset); 

    } 

    private void BindDataContext(string recipeName, DataSet dset) 
    { 
     DataTable dataTable = dset.Tables[0]; 

     if (pictureBox.Image != null) 
     { 
      pictureBox.Image.Dispose(); 
     } 

     FileStream FS1 = new FileStream("image.jpg", FileMode.Create); 

     foreach (DataRow dataRow in dataTable.Rows) 
     { 

      if (dataRow[0].ToString() == recipeName) 
      { 
       byte[] blob = (byte[])dataRow[1]; 
       FS1.Write(blob, 0, blob.Length); 
       FS1.Close(); 
       FS1 = null; 
       labelIngredients.Text = dataRow[3].ToString(); 
       labelCookSteps.Text = dataRow[2].ToString(); 
       pictureBox.Image = Image.FromFile("image.jpg"); 
       pictureBox.SizeMode = PictureBoxSizeMode.StretchImage; 
       pictureBox.Refresh(); 
      } 
     } 
    } 
} 

內。然後Form1中檢索按鈕。 cs可能看起來像:

public partial class Form1 : Form 
{ 
    //R E T R I E V E  B U T T O N 
    private void button3_Click(object sender, EventArgs e) 
    { 
     string recipeName = comboBox1.SelectedItem.ToString(); 
     Pop_up p = new Pop_up(recipeName, dset); 
     p.Show(); 
    } 
} 
+0

我得到mscorlib.dll中發生未處理的類型爲「System.IO.IOException」的異常,並在PopSup中FileSteam FS1 = new FileSteam中斷。cs – JsonStatham

+0

抱歉忽略這一點,因爲我的原始表單仍然試圖同時使用FileSteam,註釋掉其中一個或另一個將解決此問題 – JsonStatham