[英]c# Combobox in datagridview
在我的winform应用程序中,有一个datagrid,要从datagrid插入值,我在按钮click事件中使用以下代码生成了一些组合框:
dgvLoadTable.DataSource = source;
dgvLoadTable.ReadOnly = false;
dgvLoadTable.AllowUserToAddRows = true;
var practices = (from p in context.TOWERIMPORTCLIENTs select p.PRACTICE).Distinct();
for(int r= 0; r < dgvLoadTable.Rows.Count; r++)
{
for(int c = 0; c < dgvLoadTable.Columns.Count; c++)
{
if(c == 2 || c == 4)
{
this.dgvLoadTable[c, r] = new DataGridViewComboBoxCell();
foreach(var name in practices)
((DataGridViewComboBoxCell)dgvLoadTable[c, r]).Items
.AddRange(practices.ToArray());
}
}
}
这仅适用于第一行,当生成第二行时,它没有组合框。 那么,如何检测是否生成了新行?
您完全可以不使用任何代码来执行此操作。 使用设计器将DataGridViewComboBoxColumn
添加到您的数据网格中。 将此列绑定到BindingSource
(设置数据源属性),该绑定源绑定到List<Practice>
并相应地设置DisplayMember和ValueMember。
例如:
您的PracticesBindingSource的绑定将非常简单:
public void BindPractices(DbContext context)
{
PracticesBindingSource.DataSource = (
from p in context.TOWERIMPORTCLIENTs
select p.PRACTICE
).Distinct().ToArray();
}
因为您是这样设计界面的,所以datagridview在显示的每一行中的行为都相同。
如果愿意,可以在代码中添加DataGridViewComboBoxColumn。
public void AddDataGridViewComboBoxColumn(DataGridView dgv, string propertyoBindTo)
{
var dc = new DataGridViewComboBoxColumn();
dc.DataSource = this.practicesBindingSource;
dc.DisplayMember = "PRACTICE";
dc.ValueMember = "PRACTICE";
dc.DataPropertyName = propertyToBindTo;
dgv.Columns.Add(dc);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.