【发布时间】:2018-02-14 14:18:40
【问题描述】:
我正在尝试在 DataGridView 中添加一个 Combobox,如果我刷新另一个以 Windows 形式拥有的组合框,我管理此方法的方法会重复很多次,我会再次运行此方法
this.DataGridView1.ColumnCount = Constants.Vacation_Calendar.Total_Calendar_Days + 2;
this.DataGridView1.Columns[0].Name = "Resource";
this.DataGridView1.Columns[0].Width = 100;
this.DataGridView1.Columns[1].Name = "Month";
this.DataGridView1.Columns[1].Width = 60;
DataGridViewComboBoxColumn cb = new DataGridViewComboBoxColumn();
List<Process> getAllProcesses = this.bl_process.getAll_Process();
List<String> getApplication= new List<string>();
foreach (Process process in getAllProcesses)
{
getApplication.Add(process.Application);
}
if (!DataGridView1.Columns.Cast<DataGridViewColumn>().Any(x => x.Name == "ProcessColumn"))
{
cb.HeaderText = "Process";
cb.Name = "ProcessColumn";
cb.Width = 100;
cb.DataSource = getApplication;
cb.ReadOnly = false;
DataGridView1.Columns.Insert(2, cb);
}
我不断收到我在设计器中使用以下代码处理的错误:
this.DataGridView1.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.DataGridView1_DataError);
在后面的代码中:
private void DataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e){}
尽管如此,我看不到我的列表填充组合框,这里还缺少什么?
提前谢谢你
PS:我在 Quickwatches 中添加了“getApplication”对象,它从我的列表中接收所有值,所以一切都很好。
【问题讨论】:
-
你确定
if语句中的行被执行了吗?你断点了吗? -
在 Watches 输出中我添加了“DataGridView1.Columns[2]”和“cb”我在 if 语句中添加了一个断点,并且我的 cb 对象有一个计数为 3271 的数据源,这很好,问题是当我检查 DataGridView1.Columns[2]" 时,当我到达 if 语句的末尾时,似乎里面什么都没有
-
你可以试试
AddRange而不是DataSource,像这样cb.Items.AddRange(getApplication.ToArray()); -
没用。一件事我不确定是否是因为如果我删除该方法来处理错误,我会得到错误。如果我删除它,我会收到 System.ArgumentException:DataGridViewComboBoxCell 值无效的错误。要替换此默认对话框,请处理 dataError 事件
-
我在 DataGridView 中的组合框是 .. 像静态的一样,它通常不会在它为空时扩展,我可以打开它并看到只是白色的,对吗?
标签: c# .net winforms datagridview datagridviewcomboboxcolumn