【发布时间】:2016-10-18 10:27:42
【问题描述】:
我有一个 CheckedListBox 使用此代码获取项目。
public static void GetDisplayValueList(object clk, string[] kv, string tableName)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
try
{
string list = "";
foreach (string item in kv)
list += item + ",";
string query = "SELECT " + list.Substring(0, list.Length - 1) + " FROM [dbo].[" + tableName + "]";
SqlDataAdapter da = new SqlDataAdapter(query, conn);
DataSet ds = new DataSet();
da.Fill(ds);
((CheckedListBox)clk).DataSource = ds.Tables[0];
((CheckedListBox)clk).DisplayMember = "Description";
((CheckedListBox)clk).ValueMember = "Id";
}
catch (Exception ex)
{
MessageBox.Show("An error has occurred: " + ex.Message, "Error");
}
}
}
突然,它不再起作用并给出以下错误:
抛出异常:System.Windows.Forms.dll 中的“System.NullReferenceException”
我可以做些什么来解决这个问题,或者有没有其他方法可以将 CheckedListBox 绑定到 DataTable? 提前致谢。
【问题讨论】:
-
您的 ds 为空检查原因并修复它。您可以使用调试!
-
您没有显示足够的代码。
ds.Tables[0]在哪里填充?它目前是空的,这就是您收到错误的原因。 -
@RoxhensMeraj 也许是因为您的 Select 查询没有返回任何结果。
-
好吧,
clk或ds.Tables[0]为空,您会收到该错误。 -
FWIW:我遇到了完全相同的错误。显然,
CheckedListBox对象在使用List<KeyValuePairs<string,string>>分配DataSource属性时会在内部抛出(并处理?)错误。也就是说,[忽略错误时]事情工作得很好。太糟糕了,这个错误现在在整个调试会话中被忽略了,因为它是一个重要的错误。
标签: c# winforms visual-studio