日期:2014-05-17  浏览次数:20898 次

C# ComboBox DroppedDown属性存在的问题
各位大大们有何良策,描述如下:

功能描述:初始化将数据赋值給ComboBox,通过输入值再查询数据库,功能类似于google搜索功能
  例如:初始化ComboBox显示的是Content下的5条内容
  当输入字母as的时候,联合SeqNo与Content,
  as->张三,as->李四,同时搜索Content里面模糊匹配as的,即as11,as22,一共四条数据

直接绑定的话,数据动态变化会报"内存破坏"的信息,所以这里就没有绑定了

存在的问题: 1.当输入关键字时,输入的顺序是反序的

  2.鼠标指针被窗体掩盖

  3.输入关键字后,下拉框自动弹出时点内容需点击两次

  4.下拉列表出来后,不能使用键盘上下键进行选择
解决了问题一和二,第三个和第四问题待解决


数据库

表1: ItemNo SeqNo Content
  5 as1 张三
  5 as2 李四
  5 33 as11
  5 55 as22
  5 丁 ad33
sql:
  初始化查询:
  SELECT ItemInfoNo,Content,SeqNo From SickItemInfo Where ItemNo=5 Order by ItemInfoNo
  ComboBox 输入模糊查询:queryCondition即为输入的模糊字段
  SELECT ItemInfoNo,Content,SeqNo From SickItemInfo Where ItemNo=5 " + " And (Content like '" + queryCondition + "%' Or SeqNo like '" + queryCondition + "%') Order by ItemInfoNo";

测试代码:
 
C# code
 
        private void Form1_Load(object sender, EventArgs e)
        {
            this.comboBox1.TextChanged -= new System.EventHandler(this.comboBox1_TextChanged);
           
            DataSet dataSet = GetUriResultInfo();//即初始化查询
            for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
            {
                this.comboBox1.Items.Add(dataSet.Tables[0].Rows[i]["Content"]);
            }
            this.comboBox1.TextChanged += new System.EventHandler(this.comboBox1_TextChanged);
        }

        private void comboBox1_TextChanged(object sender, EventArgs e)
        {
            try
            {
                this.comboBox1.TextChanged -= new System.EventHandler(this.comboBox1_TextChanged);
                comboBox1.Items.Clear();
                string text = this.comboBox1.Text;
                DataSet dataSet = GetUriResultInfo(text);

                //if (this.comboBox1.Text != "" && this.comboBox1.Text != " ")
                //{
                //    comboBox1.DataSource = null;
                //}
                //comboBox1.DataSource = dataSet.Tables[0];
                //comboBox1.DisplayMember = "Content";
                //comboBox1.ValueMember = "SeqNo";
                //comboBox1.SelectedIndex = -1;
               
                for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
          &nbs