来自dataGridView的C#组合框?

C# comboBox from dataGridView?

我想要一个带有来自一个单元格数据网格视图的值的组合框。我试试这个,但不工作:(有什么想法吗?

1
2
3
4
5
            comboBox1.Items.Clear();
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                comboBox1.Items.Add(row.Cells[2].Value.ToString());
            }


Value 属性是 null,当你在它上面调用 ToString() 时会抛出异常。

首先检查 null

1
2
if (row.Cells[2].Value != null)
    comboBox1.Items.Add(row.Cells[2].Value.ToString());

或者,使用 LINQ 遍历行并填充 ComboBox:

1
2
3
4
5
comboBox1.Items.AddRange(
    dataGridView1.Rows.Cast<DataGridViewRow>()
                 .Where(x => x.Cells[2].Value != null)
                 .Select(x => x.Cells[2].Value.ToString())
                 .ToArray());

row.Cells[i] 集合始终从 0 开始,因此根据您拥有的列数,row.Cells[2] 实际上是第三列,并且可能不存在。但是,如果是这种情况,您可能希望得到一个 \\'System.IndexOutOfRange\\' 异常。

更可能的是单元格中没有任何内容,或者该行甚至不存在。单步调试调试器并查看错误出现的位置。

另一种更具体的处理方法是使用 for 循环来指定范围:

1
2
3
4
5
6
7
// Rows.Count specifies the range explicitly - if you have 5 rows,
// if i <= 5, it will loop through until it increments to 6, then stop.
for(int i = 0; i <= dataGridView1.Rows.Count; i++)
{
    if (dataGridView1.Rows.Cells[2].Value != null)
        comboBox1.Items.Add(dataGridView1.Rows.Cells[2].Value.ToString());
}

我认为 row.Cells[2].Value 有 NULL。尝试
row.Cells[1].Value