【问题标题】:Convert empty cells in a data table to 0将数据表中的空单元格转换为 0
【发布时间】:2010-11-17 09:20:16
【问题描述】:

我有一个数据表,其中 1 列有几个单元格具有空值。如何将它们转换为 0?

我将此数据表绑定到数据网格视图,如果数据表中为 null,则单元格为空。我需要在 datagridview 中显示 0。

【问题讨论】:

    标签: c# .net winforms datagridview


    【解决方案1】:

    试试这个:

     for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                for (int j = 0; j < dt.Columns.Count; j++)
                                {
                                    if (string.IsNullOrEmpty(dt.Rows[i][j].ToString()))
                                    {
    
                                        dt.Rows[i][j] = "0";
                                    }
                                }
                            }
    

    【讨论】:

    • 如果列是 int 类型,您将获得 ToString() 的异常
    【解决方案2】:

    编辑单元格模板并将 NullValue 设置为 0

    【讨论】:

    • 但它是 Winform 中的数据网格视图。所以我认为这行不通
    • 转到列编辑器,选择列,单击 DefaultCellTemplate 属性并在模板属性编辑器中设置值。单元格模板不是 asp.net 的东西
    【解决方案3】:

    老实说,我会在绑定到数据网格之前清除它。我将执行一个 for 循环并将所有 DBNull 值更改为 0。它的代码快速、简单、易于理解。这样做的好处是实际上将 data 更改为 0,而不是像其他人建议的那样通过调整 dataGrid 来将其 查看 更改为 0。任何一种策略都有优点,只是取决于你想做什么。

    试试这个:

    for (int i = 0; i < dataTable.Rows.Count; i++)
    {
        DataRow row = dataTable.Rows[i];
    
        if (row["ColumnA"] == DBNull.Value)
        {
            row["ColumnA"] = 0;
        }
    }

    【讨论】:

      【解决方案4】:

      我设置了 DataGridViewTextBox 列的属性。似乎按预期工作。

      amountColumn.DefaultCellStyle.NullValue = "0"; 
      

      【讨论】:

        【解决方案5】:

        如果您从数据库中获取要显示的数据,那么您可以使用以下语法将 null 绑定到 0:

        SELECT ISNULL(ColumnName, 0)
        FROM TableName;
        

        【讨论】:

        • 但我没有从数据库中获取数据。我正在读取一个excel文件。excel中的空单元格在数据表中变为空,所以当我将它绑定到数据网格视图时,它的单元格是空的
        【解决方案6】:

        这适用于所有具有空值或空值的行和列

        For i As Integer = 0 To output.Tables(0).Rows.Count - 1
                Dim row As DataRow = output.Tables(0).Rows(i)
        
                For j As Integer = 0 To output.Tables(0).Columns.Count - 1
                    If row(j) Is DBNull.Value Then
                        row(j) = 0
                    End If
                    If row(j).ToString.Length = 0 Then
                        row(j) = 0
                    End If
                Next
        
            Next
        

        C#

        for (int i = 0; i <= output.Tables[0].Rows.Count - 1; i++)
        {
            DataRow row = output.Tables[0].Rows[i];
            for (int j = 0; j <= output.Tables[0].Columns.Count - 1; j++)
            {
                if (object.ReferenceEquals(row[j], DBNull.Value))
                {
                    row[j] = 0;
                }
                if (row[j].ToString().Length == 0)
                {
                    row[j] = 0;
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2019-03-27
          • 1970-01-01
          • 2016-04-06
          • 1970-01-01
          • 2016-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多