2012-07-09 76 views
1

我在窗體上有datagridview和textboxes。當用戶單擊任何一個單選按鈕時,我會從不同的表中加載記錄。網格中的數據完美顯示。我想在這些文本框中顯示該行的值。如何將數據列綁定到文本框?

一個解決方案可以是:綁定來自數據集的數據。 第二個可以是:將行的每個單元格的值傳輸到相應的文本框。

請幫幫我。而且,請告訴我哪一個更好,還是有其他方法比這兩個更好。

在此先感謝。

回答

1

先生,我做了一個簡單的WindowsForm與2個單選按鈕,2個文本框和datagridview 這裏是sln文件http://www13.zippyshare.com/v/98590888/file.html這必須幫助你。

+0

我得到了真正的幫助。謝謝你,先生。 – 2012-07-14 02:06:49

1

我嘗試了很多選項來顯示在同一窗體上的文本框中的值,但它不工作,因爲datagridview可以顯示兩個不同的表的記錄。

相反,我用的datagridview的下列事件:

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     this.dataGridView1.SelectionChanged += new System.EventHandler(this.DisplayValueinTextBox); 
    } 

在DisplayValueinTextBox,我寫了下面的基礎上爲每個表中顯示的列數代碼:

private void DisplayValueinTextBox(object sender, EventArgs e) 
    { 
     try 
     { 
      textBox1.Text = dataGridView1.SelectedCells[0].Value.ToString(); 
      textBox2.Text = dataGridView1.SelectedCells[1].Value.ToString(); 
      textBox3.Text = dataGridView1.SelectedCells[2].Value.ToString(); 

      if (tblGrid == "Employee") //name of table which has more columns in grid 
      { 
       textBox4.Text = dataGridView1.SelectedCells[3].Value.ToString(); 
       textBox5.Text = dataGridView1.SelectedCells[4].Value.ToString(); 
       textBox6.Text = dataGridView1.SelectedCells[5].Value.ToString(); 
      } 
      this.dataGridView1.SelectionChanged -= new System.EventHandler(this.DisplayValueinTextBox); //removed it as I was getting error. 
     } 
     catch (Exception exdisp) 
     { 
      MessageBox.Show(exdisp.Message); 
     } 
    } 

我也改變SelectionMode屬性dataGridView到FullRowSelect。這將確保textbox1顯示SelectedCells [0]的值,即使用戶單擊任何單元格。

我仍然希望有一個更好的選擇,所以我在等待對此的評論。

1
Try using a BindingSource 

BindingSource bindingSource = new BindingSource(); 
DataSet dataSet = new DataSet(); 
DataAdapter da1 = new DataAdapter("Select * from Customers", conn1); 
DataAdapter da2 = new DataAdapter("Select * form Orders", conn1); 

da1.Fill(dataSet,"Customers"); 
da2.Fill(dataSet,"Orders"); 

//Let we set Customers table as bindiningSource datasource 
bindingSource.DataSource = dataSet.Tables["Customers"]; 

private void RadioButtonCustomers_CheckedChanged(object sender, EventArgs e) 
{ 
    if(radioButtonCustomers.Checked==true) 
     bindingSource.DataSource =dataSet.Tables["Customers"]; 
} 
private void RadioButtonOrders_CheckedChanged(object sender, EventArgs e) 
{ 
    if(radioButtonOrders.Checked==true) 
     bindingSource.DataSource = dataSet.Tables["Orders"]; 
} 
//First param of Binding is to which prop of TextBox to bind the value 
//Second param is the data source 
//Third param is the data member or the column name of the table as datasource, so 
//we have to get that table from casting the bindingSource datasource prop and casting it 
//to DataTable obj and after that to take the ColumnName prop of the desired column 

textBox1.DataBindings.Add(new Binding("Text",bindingSource,((DataTable)bindingSource.DataSource).Columns[0].ColumnName)); 
textBox2.DataBindings.Add(new Binding("Text",bindingSource,((DataTable)bindingSource.DataSource).Columns[1].ColumnName)); 
etc... 

即使更改的BindingSource的數據源道具,文本框將保持綁定到第一和第二列

希望這幫助rowvalue。

+0

我試過這段代碼,我的觀察結果是:1.當我點擊另一行時,我得到文本框中第一行的值。在此之後,即使選擇了另一行,文本框中的值也不會更改。 2.當我點擊單選按鈕2時它會拋出錯誤,並嘗試設置綁定源的數據源屬性。 – 2012-07-11 04:36:12

+0

使用DataGridView1_SelectionChanged事件,並使用bindingSource Position prop獲取當前行。之後,將數據行單元格值分配給每個文本框。 Datarow dr =((DataTable)bindingSource.DataSource).Rows [bindingSource.Position]; textbox1.Text = dr [0] .ToString(); textBox2.Text = dr [1] .ToString(); – 2012-07-12 11:46:03

+0

先生,分配單元格值到文本框是由我完成的,而不使用綁定源。請參閱下面的答案。我想知道爲什麼當我按照您的指導使用bindingsource時,第一次點擊datagridview後,值不會顯示。 – 2012-07-12 13:02:03

相關問題