C# ComboBox数据源出现异常
我有一段用于填充组合框的简单代码:C# ComboBox数据源出现异常,c#,winforms,visual-studio-2012,combobox,C#,Winforms,Visual Studio 2012,Combobox,我有一段用于填充组合框的简单代码: DataSet dt = new DataSet(); dt = db.getCourses(depID, academicYearValue, semID); if (dt.Tables[0].Rows.Count > 0) { dropdownCourses.DataSource = dt.Tables[0]; dropdownCourses.DisplayMember = "Course"; dropdown
DataSet dt = new DataSet();
dt = db.getCourses(depID, academicYearValue, semID);
if (dt.Tables[0].Rows.Count > 0)
{
dropdownCourses.DataSource = dt.Tables[0];
dropdownCourses.DisplayMember = "Course";
dropdownCourses.ValueMember = "ID";
}
我在表单上有4个组合框
,所有这些组合框都与上面的代码一起工作并被填充,只有当填充DataSouce时,这个组合框
我得到异常:
Object reference not set to an instance of an object.
我想不出什么,有什么建议需要寻找吗?当您处理了SelectedIndexChanged
或SelectedValueChanged
或任何其他事件时,可能会出现这种情况。当您设置组合框的DataSource
属性时,将调用该属性
发生这种情况是因为在分配数据源时未设置ValueMember
。假设您在组合框的SelectedValueChanged
事件中编写了一行代码,如下所示
String myVal = dropdownCourses.SelectedValue.ToString();
在这里,我试图将SelectedValue
转换为字符串类型的值
此代码将在分配Combobox的DataSource
之后和分配ValueMember
属性之前立即执行。因此,这意味着组合框没有ValueMember
字段
因此,SelectedValue
属性中的值将是null
,并且null
不能有任何我们试图将其转换为字符串的属性或方法。因此,这将抛出错误未设置对象实例的对象引用
解决方案:
在将DataSource
分配给组合框之前,应设置ValueMember
和DisplayMember
属性
dropdownCourses.ValueMember = "ID"; //First
dropdownCourses.DisplayMember = "Course"; //Second
dropdownCourses.DataSource = dt.Tables[0]; //Third
第二种方法是,您可以创建一个布尔标志,以避免在填充组合框期间进行不必要的事件调用
bool bLoading = false;
{
dt = db.getCourses(depID, academicYearValue, semID);
if (dt.Tables[0].Rows.Count > 0)
{
bLoading = true;
try
{
dropdownCourses.DataSource = dt.Tables[0];
dropdownCourses.DisplayMember = "Course";
dropdownCourses.ValueMember = "ID";
}
catch{}
finally{
bLoading = false; //make sure that this variable must be false after populating combobox otherwise event will not work
}
}
}
private void dropdownCourses_SelectedValueChanged(....)
{
if (!bLoading)
{
Write your code here.
}
}
若你们不想不必要地把这件事称为“事件”,我想建议第二种选择 当您分配表中的行大约为48行时,它可能为空。我确认了这一点。如果(dt.Tables[0].Rows.Count>0),它将进入循环,因此它有一些东西。.如果(dt.Tables.Count>0)添加一个条件@Sajeetharan如果它确认dt.Tables[0].Rows.Count>0,它不是自动确认dt.Tables.Count>0吗0@Steve,您是rite,我在代码中的某个地方错误地执行了dropdownCourse=null,这导致了此问题。