![](/img/trans.png)
[英]Binding a DataGridComboBoxColumn to the DataGrid's ItemsSource in C#
[英]C# Setting value on DataGridComboBoxColumn on bound datagrid using datatables
使用C#
使用SQL,我用查詢結果填充數據表。
然后我創建了一個使用該數據表作為源的數據網格。
該數據網格已使用類型為DataGridViewComboBoxColumn的列進行配置。
組合框的數據源是另一個SQL加載的數據表,每行有兩個字符串。 一個字符串是我需要的實際值,第二個字符串是用戶可見的字符串。
正確使用第二個數據表中的信息填充了組合框,並且這些值可以按需工作。 當我從數據表中保存數據時,我將獲得有關組合框的正確信息。
當我嘗試將保存的SQL信息重新加載到該數據網格中時,問題就產生了。 該值似乎不受數據表約束。
Datagrid定義:
dgHeaders.DataSource = dtCSVHeaders;
dgHeaders.Columns["nIndex"].Visible = false;
if (!dgHeaders.Columns.Contains("colType"))
{
DataGridViewComboBoxColumn colType = new DataGridViewComboBoxColumn();
colType.HeaderText = "DB Field";
colType.DropDownWidth = 140;
colType.Width = 140;
colType.DataSource = dtFields;
colType.DataPropertyName = "szDBField";
colType.DisplayMember = "szVisualField";
colType.ValueMember = "szDBField";
colType.Name = "DB Field";
colType.DefaultCellStyle.NullValue = "--Select--";
dgHeaders.Columns.Add(colType);
}
首先,我嘗試將列名colType設置為我在dataRow中填充的值,但這似乎不起作用。
由於我無法弄清楚如何使數據綁定正常工作,因此我決定嘗試將單元格強制為所需的值,因此我在數據負載上進行了嘗試。
... SQL load
foreach (DataRow drRow in dtLoad.Rows)
{
string szColumnName = drRow["szOrgColumnName"].ToString();
string szMatchName = drRow["szMatchColumn"].ToString();
DataRow drAdd = dtCSVHeaders.NewRow();
drAdd["nIndex"] = nLoop;
drAdd["szHeader"] = szColumnName;
dtCSVHeaders.Rows.Add(drAdd);
dgHeaders.Rows[nLoop].Cells[2].Value = szMatchName;
nLoop++;
}
但是可悲的是,它仍然沒有設置組合框的值。
我在此代碼上沒有錯誤或警告。
我寧願讓數據綁定來控制並執行其操作,而無需我專門用該值設置單元格。 但是,如果那是我需要做的,那就是...
嗯,您的代碼(據我所知)似乎不錯。 我不知道您的“ dtFields”對象到底是什么,但是它應該是dataTable。 我做了一個簡單的示例,說明應如何做。 看看這個:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.Columns.Add("column1", "Column name");
dataGridView1.Columns.Add(CreateComboBox());
//adding some rows:
dataGridView1.Rows.Add("a");
dataGridView1.Rows.Add("b");
}
private DataGridViewComboBoxColumn CreateComboBox()
{
DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
{
combo.Name = "comboColumn";
combo.HeaderText = "Selection";
combo.DataSource = GetDataForComboBox();
combo.DisplayMember = "Name";
combo.ValueMember = "Id";
}
return combo;
}
private DataTable GetDataForComboBox()
{
//this is your method to get the data from database
//in my exmaple I will simply add some example data:
DataTable table = new DataTable("ExampleData");
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(1, "Name 1");
table.Rows.Add(2, "Name 2");
table.Rows.Add(3, "Name 3");
return table;
}
}
此代碼有效,並且嘗試執行相同的操作,只需從dataBase填充dataTable。 但是,如果您願意,只能嘗試使用我的確切代碼,您會發現它起作用了!
再見
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.