我见过很多对象引用未设置为对象示例的问题,但我找不到我的方案中的任何一个。
我有一个名为comboBox1
的组合框。当表单加载时,我有代码来填充组合框:
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the
// 'tenderDBDataSet.tbl_Tender_To_Details' table.
// You can move, or remove it, as needed.
OleDbCommand cmd = new OleDbCommand("SELECT DISTINCT
tbl_Tender_To_Details.To_Name, tbl_Tender_To_Details.To_Address1,
tbl_Tender_To_Details.To_Address2,
tbl_Tender_To_Details.To_City, tbl_Tender_To_Details.To_PinCode "+
"FROM tbl_Tender_To_Details "+
"WHERE to_Name IS NOT NULL ", conn);
try
{
conn.Open();
OleDbDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
comboBox1.Items.Add(reader["To_Name"]);
// listBox1.Items.Add(reader[0].ToString());
// MessageBox.Show(reader[0].ToString());
}
reader.Close();
comboBox1.SelectedIndex = 0;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(comboBox1.SelectedValue.ToString());
}
字符串MessageBox.Show(comboBox1.SelectedValue.ToString());
行显示:
“组合框的对象引用未设置为对象的示例”。
但令我惊讶的是,当窗体在这个对象引用msg框之后加载时,索引0处的值被设置为组合框。
6条答案
按热度按时间4zcjmb1e1#
你可以试着把这个语句放在页面加载中,并确保组合框是否已经加载了项目??
字符串
如果使用WinForms,请尝试将该语句放入initializecomponent()函数中
型
cwtwac6a2#
首先,不要显式地将所选索引设置为0.默认为0。在执行读取器之后,可能没有从数据库加载任何内容,因此组合框的DataSource为null。在这种情况下,如果您尝试将所选索引设置为0,则当框架尝试检索数据源中的第一个空项时,将引发空引用异常。在这种情况下,您选择的索引应该是-1。
因此,如果您希望所选索引成为列表中的第一项,我不会显式设置所选项。这是组合框的默认行为。
w80xi6nr3#
首先,你有没有尝试使用调试器来检查读者是否真的放了什么东西?
我注意到你在阅读器中大写了“To_Name”,但在where子句中没有--你确定它不区分大小写吗?
其次,由于您正在使用数据库,因此更简单的方法是将函数的db结果返回到DataTable中,然后使用数据绑定。
xsuvu9jc4#
字符串
v440hwme5#
我在尝试使用
.SelectedValue
时得到了相同的错误消息。我把它改成了.SelectedItem
,错误就消失了。范例:字符串
rqqzpn5f6#
试试这个
字符串
这是我的工作