在WINFORM中
有两上combobox,分别为ddlcb1,ddlcb2.
有一个datagridview.为mygrid.
 private void Stowage_listFrm_Load(object sender, EventArgs e)
        {
            BandA();
            BandB();
            ddlcb1.SelectedIndex = 0;
            ddlcb2.SelectedIndex = 0;
            BindData();
        }
private void BandA()
        {
            string strsql = "select * from p_network";
            DataSet ds = con.getDS2(strsql.ToString(), "network");
            DataRow dr = ds.Tables["network"].NewRow();
            dr["network_id"] = "0";
            dr["network_name"] = "所有网点";            ddlcb1.DataSource = ds.Tables["network"];
            ddlcb1.DisplayMember = "network_name";
            ddlcb1.ValueMember = "network_id";
            ds.Tables["network"].Rows.InsertAt(dr, 0);
            ddlcb1.AutoCompleteMode = AutoCompleteMode.Suggest;
            ddlcb1.AutoCompleteSource = AutoCompleteSource.ListItems;
            
        }
private void BandB()
        {
            string strsql = "select * from p_network";
            DataSet ds = con.getDS2(strsql.ToString(), "network");
            DataRow dr = ds.Tables["network"].NewRow();
            dr["network_id"] = "0";
            dr["network_name"] = "所有网点";            ddlcb2.DataSource = ds.Tables["network"];
            ddlcb2.DisplayMember = "network_name";
            ddlcb2.ValueMember = "network_id";
            ds.Tables["network"].Rows.InsertAt(dr, 0);
            ddlcb2.AutoCompleteMode = AutoCompleteMode.Suggest;
            ddlcb2.AutoCompleteSource = AutoCompleteSource.ListItems;
            
        } private void BindData()
        {
            string a = ddlcb1.SelectedValue == null ? "0" : ddlcb1.SelectedValue.ToString();
            string b = ddlcb2.SelectedValue == null ? "0" : ddlcb2.SelectedValue.ToString();
            MessageBox.Show(a);
            MessageBox.Show(a);
            DataTable dt = new DataTable();
            if (a != "0")
            {
                sql2 = " and a.s_begin='" + a + "'";
            }
            if (b != "0")
            {
                sql3 = " and a.s_end='" + b + "'";
            }
           sql = "select a.* from s_user a where 1=1 " + sql2 + sql3;
           MessageBox.Show(sql);//这里输出的为什么成了select * from s_user where 1=1 and a.s_begin='1' and a.s_end='1';应该是select * from s_user where 1=1 and a.s_begin='0' and a.s_end='0'才正确。
当响应SelectedIndexChanged事件,选择第一行时(既新增行),sql不发生任何变化,只有选择其他项才会变化。            dt = con.getDT(sql);
            mygrid.DataSource = dt;
        }
 private void ddlcb1_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindData();
        }
 private void ddlcb2_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindData();
        }

解决方案 »

  1.   

    if (a != "0")
      {
      sql2 = " and a.s_begin='" + a + "'";
      }
      if (b != "0")
      {
      sql3 = " and a.s_end='" + b + "'";
      }a!=0才有后面的拼接,难道不对吗?
    按照这个IF来拼接就是
    if (a != "0")//a="1"时sql2=" and a.s_begin='1' ";
      {
      sql2 = " and a.s_begin='" + a + "'";
      }
      

  2.   

    不知道你其他地方是怎么写的。至少在这里可以看到,你永远不会拼接a == 0 和b==0的字符串。
    if (a != "0")
      {
      sql2 = " and a.s_begin='" + a + "'";
      }
      if (b != "0")
      {
      sql3 = " and a.s_end='" + b + "'";
      }看完你的代码,我建议你还是好好看一看编程基础方面的东西(不仅仅是语法,更多的是如何用编程语言表带你的逻辑思维)。写完后把代码重构再重构,这样你这方面的能力就会提高。连连数据库,拖拖控件那算不得什么,基础打好了,一切都会水到渠成
      

  3.   

    a等于0就不走if里的代码块了吧 字符串怎么还会有a.什么什么的,还有你那个messagebox提示什么啊 是0?