![](/img/trans.png)
[英]C# Datagridview: Combobox Column cell value is null even after user selects item
[英]c# Show datagridview column's distinct value in combobox item
在運行時,我將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 item = dgvLoadTable.Rows.Cast<DataGridViewRow>()
.Where(r => r.Cells[0].Value != null)
.Select(r => r.Cells[col].Value)
.Distinct();
((DataGridViewComboBoxCell)dgvLoadTable[col,row]).Items
.AddRange(item
.ToArray());
dgvLoadTable[col, row].ValueType = typeof(var);
}
}
}
dgvLoadTable.Refresh();
但這是行不通的,有什么建議嗎?
dgvLoadTable[col, row].ValueType = typeof(var);
錯了 請要么忽略它,要么使其成為數據類型,而不是其集合! 第2列和第4列中有哪些數據類型?
對於字符串或整數,您可以編寫
dgvLoadTable[col, row].ValueType = typeof(string);
要么
dgvLoadTable[col, row].ValueType = typeof(int);
但是:您可能不需要控制數據類型,因為它是由列生成的,並且您可以onyl更改列類型,而不是值類型。
但是,我發現更改單元格后需要恢復這些值。 所以整個代碼應該看起來像這樣:
for (int row= 0; row < dgvLoadTable.Rows.Count; row++)
{
for (int col = 0; col < dgvLoadTable.Columns.Count; col++)
{
if (col == 2 || col == 4)
{
var temp = dgvLoadTable[col, row].Value;
this.dgvLoadTable[col, row] = new DataGridViewComboBoxCell();
dgvLoadTable[col, row].Value = temp;
var items = dgvLoadTable.Rows.Cast<DataGridViewRow>()
.Where(r => r.Cells[0].Value != null)
.Where(r => r.Cells[col].Value != null)
.Select(r => r.Cells[col].Value)
.OrderBy(r => r).Distinct();
((DataGridViewComboBoxCell) dgvLoadTable[col, row])
.Items.AddRange(items.ToArray());
}
}
}
dgvLoadTable.Refresh();
除此之外,只要您在item
有數據,我們的代碼就可以正常工作。
如果該列中有數據,它將包含所有這些不同的值。 我添加了一個可選的排序和一個附加的where子句,以確保沒有空值潛入。
請注意事情的順序:首先我們存儲值,然后更改單元格,然后恢復值,最后我們填充組合框項!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.