如果DataGridView中的特定列为空,如何将其设置为0?

时间:2017-02-24 08:10:48

标签: c# datagridview null

在这个例子中,我分别循环遍历每个单元格。
但是,我有一个名称列和另一个我想避免的可选列。所以我宁愿在不使用可选的列的情况下循环遍历一组特定的列,但我不确定如何。

这就是我彻底扫描的方式:

foreach (DataGridViewRow row in DGVExcel.Rows)
{
    for (int i = 0; i < row.Cells.Count; i++)
    {
        if (row.Cells[i].Value == null || row.Cells[i].Value == DBNull.Value ||
            String.IsNullOrWhiteSpace(row.Cells[i].Value.ToString()))
        {
            row.Cells[i].Value = 0;
            //DGVExcel.RefreshEdit();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

  

但是,我有一个名称列[...]所以我宁愿循环遍历特定的列

如果我理解正确,你可以得到列的索引,你可以跳过一个for循环:

int colindex = DGVExcel.Columns["SpecificColumnName"].Index;

foreach (var row in DGVExcel.Rows)
{
    if (row.Cells[colindex].Value == null || row.Cells[colindex].Value == DBNull.Value ||
            String.IsNullOrWhiteSpace(row.Cells[colindex].Value.ToString()))
    {
        row.Cells[colindex].Value = 0;
        //DGVExcel.RefreshEdit();
    }

}

修改

  

有没有办法列出排除的列而不是列出的列,因为列出每个列会很混乱

在这种情况下,我会留下2个for循环。基本上,您可以保存列表中的所有名称,并检查它是否包含当前列的名称,如果不包含,则可以进行0替换。

List<string> ExcludedColumnsList = new List<string> { "ExcludedColumnName_1", "ExcludedColumnName_2" };           

foreach (DataGridViewRow row in DGVExcel.Rows)
{
    for (int i = 0; i < row.Cells.Count; i++)
    {
        if (!ExcludedColumnsList.Contains(DGVExcel.Columns[i].Name))
        {
            if (row.Cells[i].Value == null || row.Cells[i].Value == DBNull.Value ||
                    String.IsNullOrWhiteSpace(row.Cells[i].Value.ToString()))
            {
                row.Cells[i].Value = 0;
                //DGVExcel.RefreshEdit();
            }
        }
    }
}

另一种选择也可以是使用linq。获取除排除列之外的所有索引,并仅通过以下方式获取:

List<string> ExcludedColumnsList = new List<string> { "ExcludedColumnName_1", "ExcludedColumnName_2" }; 
List<int> indexList = dataGridView1.Columns.Cast<DataGridViewColumn>()
            .Where(x => !ExcludedColumnsList.Contains(x.Name))
            .Select(x => x.Index).ToList();

foreach (DataGridViewRow row in DGVExcel.Rows)
{
    foreach (int i in indexList)
    { 
        if (row.Cells[i].Value == null || row.Cells[i].Value == DBNull.Value ||
                String.IsNullOrWhiteSpace(row.Cells[i].Value.ToString()))
        {
            row.Cells[i].Value = 0;
            //DGVExcel.RefreshEdit();
        }
    }
}