如果dataGridView值不为null,则XX无法正常工作

时间:2019-02-22 14:51:32

标签: c# datagridview

在按钮内单击,我得到了这段代码,它将来自组合框的文本插入到C列:

private void updateExcel_Click(object sender, EventArgs e)
{      
    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        for (int j = 0; j < dataGridView1.Columns.Count; j++)
        {
             if  (dataGridView1.Rows[i].Cells[j].Value != null)
             {
                for (int ii = 0; ii < dataGridView1.RowCount - 1; ii++)
                {
                    dataGridView1[2, ii].Value = ConsigneeCombo.Text;
                }
                break;
             }
        }
    }
}

其运行时,应仅将值放在行中,且该行的A列中有值,但它会重复在所有行上插入的值。

1 个答案:

答案 0 :(得分:1)

关于您要做什么……,张贴的循环和逻辑看起来不正确。

  

”,它只能将值放在A列为   该行” …。

当前代码使用一个for循环遍历网格中的所有“行” ...

for (int i = 0; i < dataGridView1.Rows.Count; i++)

然后另一个for循环遍历网格中的所有“列”……

 for (int j = 0; j < dataGridView1.Columns.Count; j++)

这将遍历网格中的所有单元格…     如果网格中的单元格之一不为空……

 if  (dataGridView1.Rows[i].Cells[j].Value != null)

然后(AGAIN?)循环遍历所有“行”,并将该行中的第三列值设置为组合框中包含的值…。 ?

这听起来不像您想要的。 “ break”语句只是在找到“ first”值之后“跳过”列。这种逻辑无法实现您的要求。

因此,为了简化

“它应该只将值放在行的A列中的值上”

这意味着我们只需要遍历所有行。不必遍历各列,我们只需要执行一次此循环。逻辑存在……

遍历每行中的所有行,如果A列(0)中有“值”,则将组合框文本添加到C列(2)。这种逻辑可能类似于以下内容。

private void updateExcel_Click(object sender, EventArgs e) {
  for (int i = 0; i < dataGridView1.RowCount; i++) {
    if (!dataGridView1.Rows[i].IsNewRow &&
        dataGridView1.Rows[i].Cells[0].Value != null &&
        dataGridView1.Rows[i].Cells[0].Value.ToString() != "") {
      dataGridView1[2, i].Value = ConsigneeCombo.Text;
    }
  }
}

仅当第一列中的值不为空时,才将组合框文本添加到第三列中。