2014-10-16 49 views
0

在運行時,我將一些datagridview列更改爲combobox列。現在如何獲得組合框項目中現有的不同值?我正在使用實體模型作爲數據源。我的代碼是:c#獲取datagrid組合框項目中的現有值

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

我假設你的代碼創建值列表是工作..

您需要將這些值加載到一個DataGridViewComboBoxCellItems;這裏是代碼,不會與值的列表:

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 

和控制我的柱這樣的數據類型..:

dgvLoadTable[col, row].ValueType = typeof(string); 

..beteween上面的兩行,在創建之後即與在填充組合框之前。

更新:我已經添加了兩行來保存和恢復單元格的值,因爲這些在更改單元格時會丟失..