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 
    }
}

解决方案 »

  1.   

    这么长的代码  报错地方是?  if (comboxOBJ.GetType().ToString() == "System.Windows.Forms.ComboBox")
      ==========
      if (comboxOBJ.GetType()!=null&& comboxOBJ.GetType().ToString() == "System.Windows.Forms.ComboBox")
      
      

  2.   

    private void SQLconn(object comboxOBJ,
    为什么不直接使用Combobox作为参数,而使用object ?
      

  3.   

    设置断点,单步跟踪
    判断comboxOBJ是否为null
      

  4.   

    不是,是这几个地方报错(单击查询按钮):
    if (cmbClass.SelectedItem.ToString() != "").....
    if (cmbDeparment.SelectedItem.ToString() != "").....
    if (cmbDeparment.SelectedItem.ToString() != "")
    1楼所说的好像不行啊!
      

  5.   

    cmbClass.SelectedIndex != -1
    cmbDepartment.SelectedIndex != -1出错的地方,改成这样应该可以解决问题。
      

  6.   

    不行啊,这样的话,怎么选择dataGridView里的内容都没变化的。而且,好像还出现了新的错误。(自定义SQL语句查询方法)da.Fill(ds); 在应使用条件的上下文(在 'and' 附近)中指定了非布尔类型的表达式。
      

  7.   

    这几个地方报错(单击查询按钮时,//注意:此处要做个判断,要先确认控件激活状态才能进行进一步的判断其值是否为空):
    if (cmbClass.SelectedItem.ToString() != "").....
    if (cmbDeparment.SelectedItem.ToString() != "").....
    if (cmbDeparment.SelectedItem.ToString() != "")