为什么combobox老是报错,说是未将对象引用设置到对象的实例。可以帮我看一下吗?
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsApplication4
{
public partial class Form1 : Form
{
public string stuID; //存储学号
public string stuName; //存储姓名
public string stuClass; //存储班别
public string stuDeparment; //存储系别
public string stuXingqu; //存储兴趣
public string strSQL; //储存完整SQL语句
public Form1()
{
InitializeComponent();
}
#region 自定义初始连接数据库方法
//该方法用来对2个ComboBox控件赋值;传递2个参数,1个为对象(那一个控件),1个为字符串(按数据表的那一列查询)
private void SQLconn(object comboxOBJ, string ROW)
{
SqlConnection conn = new SqlConnection("server = 20100201-1543; database = studentMessage;uid = sa; PWD=123");
conn.Open();
string strSql = "select DISTINCT " + ROW + " FROM student";
SqlCommand cmd = new SqlCommand(strSql, conn);
SqlDataReader dr = cmd.ExecuteReader();
//此处判断该方法传入的对象参数是否为ComboBox控件
if (comboxOBJ.GetType().ToString() == "System.Windows.Forms.ComboBox")
{
//如果是,则实例化临时对象,用来把数据循环赋值给参数所指定的控件
ComboBox cbo = (ComboBox)comboxOBJ;
while (dr.Read())
{
cbo.Items.Add(dr[0].ToString());
}
}
dr.Close();
conn.Close();
}
#endregion
#region 自定义SQL语句查询方法
//该方法传入1个字符串类型的参数,该参数主要为SQL语句
private void SQLSearch(string strSQL)
{
SqlConnection conn = new SqlConnection("server = 20100201-1543; database = studentMessage;uid = sa; PWD=123");
conn.Open();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
conn.Close();
}
#endregion
#region 初始化界面控件
private void Form1_Load(object sender, EventArgs e)
{
cmbClass.Enabled = false;
cmbDeparment.Enabled = false;
cmbXingqu.Enabled = false;
mtxtID.Enabled = false;
mtxtName.Enabled = false;
}
#endregion
#region 当选择时,控件可用,并且对相关控件赋值;
//学号 CheckedBox_CheckedChanged事件
private void ckbID_CheckedChanged(object sender, EventArgs e)
{
if (ckbID.Checked == true)
{
mtxtID.Enabled = true;
//只允许输入9位数字
mtxtID.Mask = "000000000";
mtxtID.Focus();
}
else
{
mtxtID.Enabled = false;
mtxtID.Text = "";
}
}
//姓名 CheckedBox_CheckedChanged事件
private void ckbName_CheckedChanged(object sender, EventArgs e)
{
if (ckbName.Checked == true)
{
mtxtName.Enabled = true;
mtxtName.Focus();
}
else
{
mtxtName.Enabled = false;
mtxtName.Text = "";
}
}
//班别 CheckedBox_CheckedChanged事件
private void ckbClass_CheckedChanged(object sender, EventArgs e)
{
if (ckbClass.Checked == true)
{
cmbClass.Enabled = true;
//利用上面自定义的方法,为班别的ComboBox控件赋值
SQLconn(cmbClass, " 班别 ");
cmbClass.Focus();
cmbClass.AutoCompleteMode = AutoCompleteMode.Suggest;
cmbClass.AutoCompleteSource = AutoCompleteSource.ListItems;
}
else
{
cmbClass.Enabled = false;
cmbClass.Items.Clear();
}
}
//系别 CheckedBox_CheckedChanged事件
private void ckbDeparment_CheckedChanged(object sender, EventArgs e)
{
if (ckbDeparment.Checked == true)
{
cmbDeparment.Enabled = true;
//利用上面自定义的方法,为商品名称的ComboBox控件赋值
SQLconn(cmbDeparment, " 系别 ");
cmbDeparment.Focus();
cmbDeparment.AutoCompleteMode = AutoCompleteMode.Suggest;
cmbDeparment.AutoCompleteSource = AutoCompleteSource.ListItems;
}
else
{
cmbDeparment.Enabled = false;
cmbDeparment.Items.Clear();
}
}
//兴趣 CheckedBox_CheckedChanged事件
private void ckbXingqu_CheckedChanged(object sender, EventArgs e)
{
if (ckbXingqu.Checked == true)
{
cmbXingqu.Enabled = true;
//利用上面自定义的方法,为商品名称的ComboBox控件赋值
SQLconn(cmbXingqu, " 兴趣 ");
cmbXingqu.Focus();
cmbXingqu.AutoCompleteMode = AutoCompleteMode.Suggest;
cmbXingqu.AutoCompleteSource = AutoCompleteSource.ListItems;
}
else
{
cmbXingqu.Enabled = false;
cmbXingqu.Items.Clear();
}
}
#endregion
#region toolTip控件相关设置
private void mtxtID_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
{
toolTip1.ToolTipTitle = "学号查询";
toolTip1.Show("只能输入9位数字编号!", mtxtID, mtxtID.Location, 5000);
mtxtID.SelectAll();
mtxtID.SelectionStart = 0;
mtxtID.Focus();
}
private void mtxtName_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
{
toolTip1.ToolTipTitle = "姓名查询";
toolTip1.Show("请确认输入的为学生姓名!", mtxtName, mtxtName.Location, 5000);
mtxtName.SelectAll();
mtxtName.SelectionStart = 0;
mtxtName.Focus();
}
#endregion
#region 查找按钮单击事件
private void btn1_Click(object sender, EventArgs e)
{
if (mtxtID.Text != "")
{
stuID = "学号 LIKE '%" + mtxtID.Text + "%'";
}
else
{
//SQL中WHERE子查询的永真(true)语句
stuID = "1=1";
}
if (mtxtName.Text != "")
{
stuName = "姓名 LIKE '%" + mtxtName.Text + "%'";
}
else
{
//SQL中WHERE子查询的永真(true)语句
stuName = "1=1";
}
//注意:此处要做个判断,要先确认控件激活状态才能进行进一步的判断其值是否为空
if (cmbClass.Enabled == true)
{
if (cmbClass.SelectedItem.ToString() != "")
{
stuClass = "班别 LIKE '%" + cmbClass.SelectedItem.ToString() + "%'";
}
}
else
{
stuClass = "1=1";
}
if (cmbDeparment.Enabled == true)
{
if (cmbDeparment.SelectedItem.ToString() != "")
{
stuDeparment = "系别 LIKE '%" + cmbDeparment.SelectedItem.ToString() + "%'";
}
}
else
{
stuDeparment = "1=1";
}
if (cmbXingqu.Enabled == true)
{
if (cmbXingqu.SelectedItem.ToString() != "")
{
stuXingqu = "兴趣 LIKE '%" + cmbXingqu.SelectedItem.ToString() + "%'";
}
}
else
{
stuXingqu = "1=1";
}
strSQL = "SELECT * FROM student WHERE " + stuID + " and " + stuName + " and " + stuClass + " and " + stuDeparment + " and " + stuXingqu;
SQLSearch(strSQL);
toolStripStatusLabel1.Text = "查询到 " + Convert.ToString(dataGridView1.Rows.Count - 1) + "条数据";
strSQL = "";
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
#endregion
}
} --------------------编程问答-------------------- 这么长的代码 报错地方是?
if (comboxOBJ.GetType().ToString() == "System.Windows.Forms.ComboBox")
==========
if (comboxOBJ.GetType()!=null&& comboxOBJ.GetType().ToString() == "System.Windows.Forms.ComboBox")
--------------------编程问答-------------------- private void SQLconn(object comboxOBJ,
为什么不直接使用Combobox作为参数,而使用object ? --------------------编程问答-------------------- 设置断点,单步跟踪
判断comboxOBJ是否为null --------------------编程问答-------------------- 不是,是这几个地方报错(单击查询按钮):
if (cmbClass.SelectedItem.ToString() != "").....
if (cmbDeparment.SelectedItem.ToString() != "").....
if (cmbDeparment.SelectedItem.ToString() != "")
1楼所说的好像不行啊! --------------------编程问答-------------------- cmbClass.SelectedIndex != -1
cmbDepartment.SelectedIndex != -1
出错的地方,改成这样应该可以解决问题。 --------------------编程问答-------------------- 不行啊,这样的话,怎么选择dataGridView里的内容都没变化的。而且,好像还出现了新的错误。(自定义SQL语句查询方法)da.Fill(ds); 在应使用条件的上下文(在 'and' 附近)中指定了非布尔类型的表达式。 --------------------编程问答--------------------
由于我是初学者,可以说得详细点吗? --------------------编程问答-------------------- 哪儿报错最好标出来啊我没有看完,太长了啊 --------------------编程问答-------------------- 这几个地方报错(单击查询按钮时,//注意:此处要做个判断,要先确认控件激活状态才能进行进一步的判断其值是否为空):
if (cmbClass.SelectedItem.ToString() != "").....
if (cmbDeparment.SelectedItem.ToString() != "").....
if (cmbDeparment.SelectedItem.ToString() != "")
补充:.NET技术 , C#