如何在列的第一个空单元格中添加值?

时间:2019-07-26 06:53:29

标签: c# .net datagridview

在我的应用程序中,我有一个datagridview。对于每一列,都有一个按钮。如果单击,则获取列索引,现在想在该列的第一个(底部或顶部无关紧要)空闲单元格中添加用户输入的值。如果没有空单元格,我想创建一个。

我尝试遍历所有行,获取单元格值并检查它们是否为空。

string data = "%VALUE%";
int rowIndex = -1;

foreach (DataGridViewRow row in dataGridViewTasks.Rows)
{
    data = (string) row.Cells[columnIndex].Value;
    if (string.IsNullOrWhiteSpace(data))
    {                    
        rowIndex = row.Index;
        break;
    }
    else if (row.Cells[columnIndex].RowIndex == dataGridViewTasks.Rows.Count - 1)
    {
        rowIndex = dataGridViewTasks.Rows.Add();
        break;
    }
}

if (string.IsNullOrWhiteSpace(data) && rowIndex > -1)
{                
    dataGridViewTasks[columnIndex, rowIndex].Value = task.name;
}

此解决方案的问题是:

例如,如果填充了A列的第1行和第2行,则B列中的新值将添加到第3行中。所以这不是我想要的。

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那应该可以。 试试吧:

    private void Button1_Click(object sender, EventArgs e)
    {
        var columnIndex = 1;
        var dataGrid = new DataGridView();

        var index = GetFirstEmptyCellByColumnIndex(dataGrid, columnIndex);
        dataGrid[columnIndex, index].Value = "new value";

    }

    private int GetFirstEmptyCellByColumnIndex(DataGridView dataGrid, int columnIndex)
    {
        var index = -1;
        foreach (DataGridViewRow row in dataGrid.Rows)
        {
            if (string.IsNullOrEmpty((string)row.Cells[columnIndex].Value))
            {
                index = row.Index;
                break;
            }
        }

        return index != -1
            ? index
            : dataGrid.Rows.Add();
    }