我在窗體上有datagridview和textboxes。當用戶單擊任何一個單選按鈕時,我會從不同的表中加載記錄。網格中的數據完美顯示。我想在這些文本框中顯示該行的值。如何將數據列綁定到文本框?
一個解決方案可以是:綁定來自數據集的數據。 第二個可以是:將行的每個單元格的值傳輸到相應的文本框。
請幫幫我。而且,請告訴我哪一個更好,還是有其他方法比這兩個更好。
在此先感謝。
我在窗體上有datagridview和textboxes。當用戶單擊任何一個單選按鈕時,我會從不同的表中加載記錄。網格中的數據完美顯示。我想在這些文本框中顯示該行的值。如何將數據列綁定到文本框?
一個解決方案可以是:綁定來自數據集的數據。 第二個可以是:將行的每個單元格的值傳輸到相應的文本框。
請幫幫我。而且,請告訴我哪一個更好,還是有其他方法比這兩個更好。
在此先感謝。
先生,我做了一個簡單的WindowsForm與2個單選按鈕,2個文本框和datagridview 這裏是sln文件http://www13.zippyshare.com/v/98590888/file.html這必須幫助你。
我嘗試了很多選項來顯示在同一窗體上的文本框中的值,但它不工作,因爲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]的值,即使用戶單擊任何單元格。
我仍然希望有一個更好的選擇,所以我在等待對此的評論。
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。
我試過這段代碼,我的觀察結果是:1.當我點擊另一行時,我得到文本框中第一行的值。在此之後,即使選擇了另一行,文本框中的值也不會更改。 2.當我點擊單選按鈕2時它會拋出錯誤,並嘗試設置綁定源的數據源屬性。 – 2012-07-11 04:36:12
使用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
先生,分配單元格值到文本框是由我完成的,而不使用綁定源。請參閱下面的答案。我想知道爲什麼當我按照您的指導使用bindingsource時,第一次點擊datagridview後,值不會顯示。 – 2012-07-12 13:02:03
我得到了真正的幫助。謝謝你,先生。 – 2012-07-14 02:06:49