2013-04-10 64 views
0

我試圖通過窗體(在WinForms中)更新數據庫信息。 DataGridView顯示Form1中的數據庫信息(其中還包含一個打開Form2(更新表單)的按鈕)。要更新信息,我必須在datagrid中選擇一行,然後點擊按鈕(打開Form2)。當更新窗體打開時,其中的文本框應填充DataGridRows信息。現在,這裏是我被卡住的地方,文本框沒有被填充(沒有錯誤)。我究竟做錯了什麼 ?用DataGridView信息填充文本框

下面是我使用的代碼:

 MainForm getMainForm = new MainForm(); 

     private void EditMemberForm_Load(object sender, EventArgs e) 
     { 
      DataGridViewCell cell = null; 

      foreach (DataGridViewCell selectedCell in getMainForm.MembersGridView.SelectedCells) 
      { 
       cell = selectedCell; 
       break; 
      } 

      if (cell != null) 
      { 
       DataGridViewRow row = cell.OwningRow; 

       EditFirstNameTextBox.Text = row.Cells["FirstNameColumn"].Value.ToString(); 
       EditLastNameTextBox.Text = row.Cells["LastNameColumn"].Value.ToString(); 
       EditPersonalIdTextBox.Text = row.Cells["PersonalIdColumn"].Value.ToString(); 
       EditCityComboBox.Text = row.Cells["CityColumn"].Value.ToString(); 
       EditPhoneNumberTextBox.Text = row.Cells["PhoneNumberColumn"].Value.ToString(); 
      } 
     } 

回答

1
MainForm getMainForm = new MainForm(); 

問題是要創建新的主要形式,並得到來自新創建的主要形式選定行。

當您創建EditMemberForm您可以將值作爲參數傳遞給EditMemberForm

+0

如何做到這一點? 當我在上課時,我使用這個: class BLLABLLA(SomeClass entity) 但是,我應該如何在這裏傳遞參數? – 2013-04-10 09:47:16

+0

您需要將一個構造函數添加到'EditMemberForm',以便它接受'DataGridView'或'DataGridViewRow'。然後,通過傳遞您的數據網格或選定的行來實例化它,具體取決於您的需求 – 2013-04-10 09:50:25

+0

我已經計算出來了。我會在我的問題中留下一張紙條。謝謝:) – 2013-04-10 09:51:59

0

而不是創建新的MainForm的,從你的MainForm到Form2通過你選擇的對象,當你點擊按鈕...

例子:

private void Form2Button_Click(object sender, EventArgs e){ 
    Form f=new Form2(dataGridView.SelectedRow); 
    f.show(); 
} 

而且在你Form2的構造函數:

object myRow; 

public Form2(object myRow){ 
    this.myRow=myRow 
} 
+0

爲什麼你建議使用'object'類型? – 2013-04-10 09:51:40

+0

不要使用對象,但當然選擇最合適!這只是泛型 – Alice 2013-04-15 06:58:47

0

我想通了。

我在打開UpdateForm(從MainForm)的按鈕中使用此代碼。

   EditMemberForm getEditMemberForm = new EditMemberForm(); 
       DataGridViewCell cell = null;     

       foreach (DataGridViewCell selectedCell in MembersGridView.SelectedCells) 
       { 
        cell = selectedCell; 
        break; 
       } 

       if (cell != null) 
       { 
        DataGridViewRow row = cell.OwningRow; 

        getEditMemberForm.EditFirstNameTextBox.Text = row.Cells["FirstNameColumn"].Value.ToString(); 
        getEditMemberForm.EditLastNameTextBox.Text = row.Cells["LastNameColumn"].Value.ToString(); 
        getEditMemberForm.EditPersonalIdTextBox.Text = row.Cells["PersonalIdColumn"].Value.ToString(); 
        getEditMemberForm.EditCityComboBox.Text = row.Cells["CityColumn"].Value.ToString(); 
        getEditMemberForm.EditPhoneNumberTextBox.Text = row.Cells["PhoneNumberColumn"].Value.ToString(); 
       } 

       getEditMemberForm.ShowDialog(); 

這很好。感謝任何試圖幫助的人,歡呼:)!

0

我最近有類似的問題,我解決了這個問題。

Form1中:

public void NotifyMe(string s, string s2, string s3, string s4, string s5) 
{ 
    if (textBox1.InvokeRequired) 
    { 
     textBox1.Invoke((MethodInvoker)delegate { textBox1.Text = s; }); 
    } 
    else 
    { 
     textBox1.Text = s; 
    } 

    //... 
} 

營業時間從Form1中Form2的是這樣的:

using (Form2 form = new Form2()) 
{ 
    // passing this in ShowDialog will set the .Owner 
    // property of the child form 
    form.ShowDialog(this); 
} 

窗體2:

parent = (Form1)this.Owner; 
parent.NotifyMe(s, s2, s3, s4, s5);