我使用以下代码使用LINQ和实体框架在datagridview中生成组合框列。
dgvLoadTable.DataSource = null;
var context = new BatchEntities();
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;
var practices = (from p in context.TABLE1 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());
}
}
}
dgvLoadTable.Refresh();
这里,在for循环中,我使用var实践设置组合框的项目,但对于不同的列,项目将是不同的。这样,我必须为每列创建不同的变量。有没有办法使用通用代码执行此操作,其中tablename将从cboSelectTable中选择,并且该列将由其索引选择,如if语句中所述。如果可能请帮助,谢谢。
答案 0 :(得分:0)
您可以使用以下代码插入Checkboxrow:
<强> CODE 强>
DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn(); dataGridView1.Columns.Add(chk); chk.HeaderText = "Check Data"; chk.Name = "chk"; dataGridView1.Rows[2].Cells[3].Value = true;
通常使用“CurrentCell”方法调用单元格...例如:
<强> CODE 强>
private void dgvLoadTable_CelldoubleClick(object sender, DataGridViewCellEventArgs e)
{
//do some code here
if (e.ColumnIndex == 1) // Check the current ColumnIndex...
{
//do some code here
}
所以你不能为每一行设置一个变量。希望这对你有所帮助!