编辑小写字母,在C#中检查null

时间:2018-11-28 01:26:55

标签: c# csv datagridview datagrid null

我的代码将datagrid保存到csv。何时

TypeError: __init__() missing 1 required positional argument: 'x'

错误消息如下: System.Windows.Forms.DataGridViewCell.Value.get返回null。

然后,我添加大写字母以检查单元格是否为空并将这些单元格替换为“ Null”。

value = dr.Cells[i].Value.ToString();

但是错误消息仍然存在。

以下是我的代码:

foreach (DataGridViewRow rw in this.dataGridView1.Rows)
                {
                    for (int i = 0; i < rw.Cells.Count; i++)
                    {
                        if (rw.Cells[i].Value == System.DBNull.Value)
                        {
                            swOut.Write("Null");
                        }
                    }
                }

1 个答案:

答案 0 :(得分:0)

当前代码似乎可以正常工作……如果DataGridView.AllowUserToAddRowsfalse!默认值为true。如果网格允许用户添加行,则代码将在该行崩溃……

value = dr.Cells[i].Value.ToString();

当它到达“新”行时。 “新”行中的单元格是null而不是DBNull.如果您想允许用户添加行(我认为是这种情况,因为代码去除了逗号和换行符),该代码将需要检查此“新”行,并在导出网格时将其忽略。

话虽如此,我相信您正在使这种方式变得比必须的更加复杂。目标是将DataGridView中的单元格导出到逗号分隔文件(CSV)。这可以用更少的代码来完成,并且仍然可以避免单元格中可怕的空值。

从CSV文件的角度来看,如果单元格为“ null”,则意味着我们要向CSV文件输出“空”字符串。这将维护列架构。因此,只需要做一个穿过网格单元的简单双环。在遍历单元格并将值写入文件时,在尝试获取单元格value.ToString()之前,需要进行简单的检查。如果value为空,则代码将崩溃,因为null没有ToString()方法。因此,如果valuenull,则向文件写入一个空字符串……问题已解决!

因此,为了提供帮助,我建议您使用其他策略来导出网格单元。似乎没有理由使用dr变量或value变量。此外,我假设单元格文本“不”包含逗号(,)。如果您“知道”网格将被导出到CSV文件中,那么……我将设置网格单元,以使用户“无法”输入逗号。因此,下面的代码不会去除逗号或换行符。希望有道理。

public void writeCSV(DataGridView gridIn, string outputFile) {
   try {
     using (StreamWriter swOut = new StreamWriter(outputFile)) {
       //write header rows to csv
       for (int i = 0; i < gridIn.Columns.Count; i++) {
         swOut.Write(gridIn.Columns[i].HeaderText);
         if (i < gridIn.ColumnCount - 1) {
           swOut.Write(",");
         }
         else {
           swOut.WriteLine();
         }
       }
       //write DataGridView rows to csv
       for (int row = 0; row < gridIn.Rows.Count; row++) {
         if (!gridIn.Rows[row].IsNewRow) {
           for (int col = 0; col < gridIn.Columns.Count; col++) {
             if (dataGridView1.Rows[row].Cells[col].Value != null) {
               swOut.Write(dataGridView1.Rows[row].Cells[col].Value.ToString());
             }
             else {
               swOut.Write("");
             }
             if (col < gridIn.Columns.Count - 1) {
               swOut.Write(",");
             }
             else {
               swOut.WriteLine();
             }
           }
         }
       }
     }
   }
   catch (Exception e) {
      MessageBox.Show("Error: " + e.Message);
   }
 }