C#DataGridView单元格更新不更新最后一行

时间:2019-04-03 09:39:08

标签: c# winforms datagridview

我有一个按钮,它用组合框中选择的内容更新第3列(C)(标题除外)中的所有值。

    private void updateExcel_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < dataGridView1.RowCount - 1; i++)
        {
            if (!RowIsEmpty(i))
            {
                dataGridView1[2, i].Value = Combo.Text;
            }
        }
    }

此方法除了不会更新最后一行外,还可以。

RowIsEmpty:

    private bool RowIsEmpty(int rowIndex)
    {
        for (int i = 0; i < dataGridView1.ColumnCount; i++)
        {
            if (dataGridView1.Rows[rowIndex].Cells[i].Value != null &&
                dataGridView1.Rows[rowIndex].Cells[i].Value.ToString() != "")
            {
                return false;
            }
        }
        return true;
    }

1 个答案:

答案 0 :(得分:2)

我认为您的问题出在ValueError: Dimensions must be equal, but are 1001 and 0 for 'lambda_9/add' (op: 'Add') with input shapes: [?,1001,1], [?,0,1001]. ..

在我看来,问题在于:

updateExcel_Click

因为您要跳过这里的行,所以假设for (int i = 0; i < dataGridView1.RowCount - 1; i++) 的值为3,而您使dataGridView1.RowCount的值为dataGridView1.RowCount - 1

使用此功能,您的for将运行0、1和2。从我的角度来看,当您希望目标运行0、1、2和3时。

您说的问题是:不更新最后一行,因为for正在跳过最后一行。

解决方案:

dataGridView1.RowCount = 2

或者,如果您想保留自己的逻辑,则需要添加private void updateExcel_Click(object sender, EventArgs e) { for (int i = 0; i < dataGridView1.RowCount; i++) { if (!RowIsEmpty(i)) { dataGridView1[2, i].Value = Combo.Text; } } } ,如下所示:

<