C# 如何通过数据集将列表从SQL Server加载到ListView?

C# 如何通过数据集将列表从SQL Server加载到ListView?,c#,C#,我有一个看似简单的问题,但要想弄清楚却让我心烦意乱 我有一个表单,其中有一个列表视图。在这个ListView中,我想用SQLServer2008数据库表中的数据填充它 public void LoadList() { DataTable dtable = budget_MainDataSetReceipt.Tables["Receipt"]; listView1.Items.Clear(); for (int i = 0; i < dtable.Rows.Count;

我有一个看似简单的问题,但要想弄清楚却让我心烦意乱

我有一个表单,其中有一个列表视图。在这个ListView中,我想用SQLServer2008数据库表中的数据填充它

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);
      }
   }
} 
我还尝试使用以下方法初始化DataTables类型:

DataTables dt = new DataTables //did not work

我的直觉是:您假设
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()

在哪一行获得空引用异常?您可以显示一些示例数据吗?我得到以下错误:
DataTable dtable=budget\u maindasetraceipt.Tables[“receive”]
这意味着
budget\u maindasetraceipt
为空。您是否尝试使用数字索引(仅用于测试)?可能他找不到具有该名称的表。为了确定,在尝试访问数据集以填充listview之前,您是否已将数据集加载到该数据集?+1表示提示中不存在列,但他的注释表明他在“DataTable DTTable=budget\u MainDataSetReceipt.Tables[“Receive”]行上遇到了错误我意识到我所寻找的东西实际上不可能在我所尝试的环境中发生,但我非常感谢你的帮助。我按照您所述的方式重新编辑了我的ListViewItem,它确实有效,因此这将是公认的答案。我相信我会有更多与C#相关的问题,因此我感谢所有的帮助。
ListViewItem lvi = new ListViewItem(SafeGetString(drow, "ReceiptID"));
lvi.SubItems.Add(SafeGetString(drow, "DateCleared"));
// and so forth