使用 addrange 添加具有混合列类型的数据网格视图行



我有一个用数据库中的数据填充的数据网格视图,最后两列是一个组合框和一个按钮。

为了防止闪烁,我使用 Rows.AddRange 一次添加所有行(整个过程在后台工作线程中)

我的问题是如何将值添加到下拉框中。这些项目只是一个刺痛列表,因此无需数据源。

DataTable dt = db.fill(query, dbpars);
DataGridViewComboBoxCell cbox = new DataGridViewComboBoxCell();
cbox.Items.Add("--Please Select--");
cbox.Items.Add("Generate");
cbox.Items.Add("Ignore");
List<DataGridViewRow> rowList = new List<DataGridViewRow>();
foreach (DataRow row in dt.Rows)
{
    DataGridViewRow drow = new DataGridViewRow();
    drow.CreateCells(dgvClientWork);
    drow.Cells[0].Value = row[0];
    drow.Cells[1].Value = row[1];
    drow.Cells[2].Value = row[2];
    drow.Cells[3].Value = row[3];
    drow.Cells[4].Value = row[4];
    drow.Cells[5].Value = row[5];
    //((DataGridViewComboBoxColumn)dgvClientWork.Columns[6]).Items.Add("2");
    //var td = new DataGridViewComboBoxCell();
    //drow.Cells[6] = td;
    //((DataGridViewComboBoxCell) drow.Cells[6]).Items.Add("WFT");
    DataGridViewComboBoxCell td = (DataGridViewComboBoxCell)dgvClientWork.Rows[0].Cells[6];
    td.Items.Add("--Please Select--");
    td.Items.Add("Generate");
    td.Items.Add("Ignore");
    //td.Items.AddRange(new object[]{"--Please Select--", "Generate", "Ignore"});
    //var t = (DataGridViewComboBoxCell)cbox.Clone();
    //drow.Cells.Add(t);
    //drow.Cells[6] = t;
    //drow.Cells[6].Value = "--Please Select--";
    /*drow.Cells[7].Value = btn;*/
    rowList.Add(drow);
}
Action action = () => dgvClientWork.Rows.AddRange(rowList.ToArray());
dgvClientWork.Invoke(action);

如您所见,我已经尝试了几件事,但组合框始终是空白的。

如果我

正确复制了您的问题,如果您检查 dgv 中的最后一行,该下拉菜单将包含您添加的项目的倍数。

若要修复,请更改以下代码行:

DataGridViewComboBoxCell td = (DataGridViewComboBoxCell)dgvClientWork.Rows[0].Cells[6];

对此:

DataGridViewComboBoxCell td = (DataGridViewComboBoxCell)drow.Cells[6];

编辑:如果您希望单元格默认,只需添加

td.Value = "--Please Select--";

然后为我工作。

编辑:附带说明一下,当您创建DGV并添加列时,我只会创建ComboBoxColumn并将其数据源设置为您在代码中设置的相同字符串的列表。 这样,用户新添加的任何行也将具有相同的组合框源。 截至目前,任何新行都将具有空组合框。

相关内容

  • 没有找到相关文章

最新更新