在运行时我将datagridview的一些列更改为组合框列。现在我如何获得组合框项目中现有的不同值?我使用实体模型作为数据源。我的代码是:
dgvLoadTable.DataSource = null;
var context = new AdminEntities();
var TableName = cboSelectTable.Text.ToString();
var rawData = context.GetType().GetProperty(TableName).GetValue(context, null);
var truncatedData = ((IQueryable<object>)rawData).Take(0);
var source = new BindingSource { DataSource = truncatedData };
dgvLoadTable.DataSource = source;
dgvLoadTable.ReadOnly = false;
dgvLoadTable.AllowUserToAddRows = true;
for (int row= 0; row < dgvLoadTable.Rows.Count; row++)
{
for (int col = 0; col < dgvLoadTable.Columns.Count; col++)
{
if (col == 2 || col == 4)
{
this.dgvLoadTable[col, row] = new DataGridViewComboBoxCell();
//var ss = dgvLoadTable.AsEnumerable().Select(_ => _.Field<string>(Columns[col])).Distinct();
}
}
}
dgvLoadTable.Refresh();
答案 0 :(得分:0)
我假设您创建值列表的代码正在运行..
您需要将这些值加载到Items
的{{1}}中;这是使用值列表执行此操作的代码:
DataGridViewComboBoxCell
请注意,为此,我们必须强制将单元格转换为if (col == 2 || col == 4)
{
var temp = this.dgvLoadTable[col, row].Value;
this.dgvLoadTable[col, row] = new DataGridViewComboBoxCell();
this.dgvLoadTable[col, row].Value = temp;
// if the value lists depend on the column, you may want to create them here!
((DataGridViewComboBoxCell)dgvLoadTable[col, row]).Items.AddRange(numbers.ToArray());
}
,因为普通单元格没有DataGridViewComboBoxCell
。
在我的测试用例中,我使用了
Items
并像这样控制我的列的数据类型..:
List<string> values
..在上面两行之间,即在创建之后和填充组合框之前。
更新:我添加了两行来保存和恢复单元格的值,因为这些行在更改单元格时会丢失。