c#获取datagrid组合框项目中的现有值

时间:2014-10-16 15:27:59

标签: c# entity-framework datagridview datagrid combobox

在运行时我将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();

1 个答案:

答案 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

..在上面两行之间,即在创建之后和填充组合框之前。

更新:我添加了两行来保存和恢复单元格的值,因为这些行在更改单元格时会丢失。