使用 C#
使用 SQL,我使用查询结果填充数据表。
然后我创建了一个使用该数据表作为其源的数据网格。
数据网格已经配置了 DataGridViewComboBoxColumn 类型的列。
Combobox 的数据源是另一个 SQL 加载的数据表,每行有两个字符串。一个字符串是我需要的实际值,第二个字符串是用户可见字符串。
组合框使用来自第二个数据表的信息正确填充,并且值按需要工作。当我从数据表中保存数据时,我得到了组合框的正确信息。
当我尝试将保存的 SQL 信息加载回该数据网格时,问题就出现了。该值似乎没有绑定到数据表项。
数据网格定义:
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++;
}
但遗憾的是,这仍然没有设置组合框的值。
我对此代码没有错误或警告。
我宁愿让数据绑定控制并做它的事情,而无需我专门为单元格设置值。但如果这是我需要做的,那就这样吧......