如何通过SQL Server中的数据集将列表加载到ListView中?

时间:2012-01-01 12:15:44

标签: c#

我有一个似乎是一个简单的问题,但是它让我试图找出它。

我有一个表单,其中有一个ListView。在这个ListView中,我想用SQL Server 2008数据库表中的数据填充它。

public void LoadList()
{
   DataTable dtable = budget_MainDataSetReceipt.Tables["Receipt"];
   listView1.Items.Clear();

   for (int i = 0; i < dtable.Rows.Count; i++)
   {
      DataRow drow = dtable.Rows[i];

      if (drow.RowState != DataRowState.Deleted)
      {
         ListViewItem lvi = new ListViewItem(drow["ReceiptID"].ToString());
         lvi.SubItems.Add(drow["DateCleared"].ToString());
         lvi.SubItems.Add(drow["CategoryID"].ToString());
         lvi.SubItems.Add(drow["Amount"].ToString());
         lvi.SubItems.Add(drow["Store"].ToString());
         lvi.SubItems.Add(drow["DateEntered"].ToString());

         listView1.Items.Add(lvi);
      }
   }
} 

我一直在

  

对象引用未设置为对象的实例

错误,我无法弄清楚原因。我的数据库中有大约5行数据,因此在我看来,列表视图中应该有5行数据。

谁能告诉我我失踪了什么?如果有帮助,我可以发布更多代码。

我尝试过多种方式调用LoadList()方法:

  • 在方法本身之前
  • 使用InitializeComponent()方法
  • 我尝试了以下语法

    this.LoadList(); 
    this.Form1.LoadList();`
    

我还尝试使用以下内容初始化DataTables类型:

DataTables dt = new DataTables //did not work

1 个答案:

答案 0 :(得分:2)

我的预感是:你假设你DataRow中的所有列都存在而不是空 - 这是一个危险的假设。

我会更改您的作业,以便在返回字符串之前使用检查DBNull的方法:

public string SafeGetString(DataRow row, string columnName)
{
    if(row[columnName] != null && row[columnName] != DBNull.Value)
    {
        return row[ColumName].ToString();
    }

    return string.Empty;
}

所以你可以看起来像:

ListViewItem lvi = new ListViewItem(SafeGetString(drow, "ReceiptID"));
lvi.SubItems.Add(SafeGetString(drow, "DateCleared"));
// and so forth

这样,如果任何列应包含NULL,您将返回一个空字符串 - 而不是遇到导致您看到的错误的NULL.ToString()