none
想实例自动查询 怎么做呀????????????? RRS feed

  • 问题

  • 功能:
                  搜索: ———当输入“王”的时候(不做任何操作,会自动显示)

                 DataGrid会显示数据库中怕有姓“王”的用户
    然后再接着输入“王小”
                    DataGrid会显示数据库中怕有姓“王小”的用户

    然后再接着输入“王小二”
                   DataGrid会显示数据库中怕有姓“王小二”的用户


    这种功能叫什么呀?
    怎么实现 呀(C# WinForm)里

    2010年3月16日 10:56

答案

  • 使用这个事件的目的是为了让 TextBox 控件输入值改变时能去修改 Filter 属性,你使用其它事件也可以与效率无关。
    知识改变命运,奋斗成就人生!
    • 已标记为答案 server126 2010年3月17日 3:21
    2010年3月17日 3:00
    版主

全部回复

  • 自己写个控件

    一个textbox+一个gridview控件

    捕获textbox的change事件,更新gridview内容。

    这个是基本原理。如果要做好还需要很多工作。
    family as water
    • 已标记为答案 server126 2010年3月17日 2:23
    • 取消答案标记 server126 2010年3月17日 2:23
    2010年3月16日 11:31
  • 类似的还有google和百度等的搜索条,也是这种效果,原理就是楼上说的,一般就叫即时搜索吧
    霸王
    2010年3月16日 13:24
  • 你好!

    Winform 中 BindingSource 组件绑定 DataGridView 结合用户的输入动态组织 BindingSource 的 Filter 属性就行了,界面会自动过滤显示的。

    具体步骤:

    1 用户信息表读取出来使用 BindingSource 绑定 DataGridView
    2 为 TextBox 注册 TextChanged 事件
    3 在 TextChanged 去改为 BindingSource 的 Filter 属性,如下代码:

    BindingSouce.Sort = string.Format("NameField LIKE '%{0}%'", textBox1.Text);

    知识改变命运,奋斗成就人生!
    • 已标记为答案 server126 2010年3月17日 2:23
    • 取消答案标记 server126 2010年3月17日 2:23
    2010年3月16日 13:52
    版主
  • 你好!
    使用TextBox的TextChanged事件,在这个事件处理程序中写搜索数据库的代码就可以了!
    希望对你有帮助!
    周雪峰
    2010年3月16日 15:13
    版主
  • 先谢谢各位的回答。
             我试了 用的是TextChanged事件来实现的
    可是总是取不到this.textbox1.text的值呀?
    不知道为什么 谢谢

    2010年3月17日 1:49
  • 你好!

    Winform 中 BindingSource 组件绑定 DataGridView 结合用户的输入动态组织 BindingSource 的 Filter 属性就行了,界面会自动过滤显示的。

    具体步骤:

    1 用户信息表读取出来使用 BindingSource 绑定 DataGridView
    2 为 TextBox 注册 TextChanged 事件
    3 在 TextChanged 去改为 BindingSource 的 Filter 属性,如下代码:

    BindingSouce.Sort = string.Format("NameField LIKE '%{0}%'", textBox1.Text);

    知识改变命运,奋斗成就人生!

    您好
               您能再仔细说一下您的方法吗?谢谢
    2010年3月17日 1:52
  • 你好!

    我写了个简单的示例,你参考下。

    using System;
    using System.Data;
    using System.Windows.Forms;
    
    namespace X.WinForms.UI.Controls.DataGridView
    {
        public partial class AutoFilter : Form
        {
            public AutoFilter()
            {
                InitializeComponent();
    
                this.InitData();
                this.InitUI();
            }
    
            private System.Windows.Forms.TextBox textBox1;
            private System.Windows.Forms.DataGridView dataGridView1;
            private BindingSource bs;
            private DataTable dt;
    
            private void InitData()
            {
                this.dt = new DataTable();
    
                this.dt.Columns.Add("Id", typeof(Guid));
                this.dt.Columns.Add("Name", typeof(string));
    
                this.dt.Rows.Add(new object[] { Guid.NewGuid(), "王" });
                this.dt.Rows.Add(new object[] { Guid.NewGuid(), "王小" });
                this.dt.Rows.Add(new object[] { Guid.NewGuid(), "王小二" });
    
                this.dt.Rows.Add(new object[] { Guid.NewGuid(), "李" });
                this.dt.Rows.Add(new object[] { Guid.NewGuid(), "李小" });
                this.dt.Rows.Add(new object[] { Guid.NewGuid(), "李小二" });
    
                this.bs = new BindingSource(this.dt, null);
            }
    
            private void InitUI()
            {
                this.textBox1 = new TextBox();
                this.textBox1.Dock = DockStyle.Top;
                this.textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
                this.Controls.Add(this.textBox1);
                this.dataGridView1 = new System.Windows.Forms.DataGridView();
                this.dataGridView1.Dock = DockStyle.Fill;
                this.dataGridView1.DataSource = this.bs;
                this.Controls.Add(this.dataGridView1);
            }
    
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                // 设置过滤表达未,这和 SQL 中的 Where 相似。
                this.bs.Filter = string.IsNullOrEmpty(this.textBox1.Text)
                    ? string.Empty
                    : string.Format("Name LIKE '%{0}%'", this.textBox1.Text);
            }
        }
    }
    


    知识改变命运,奋斗成就人生!
    2010年3月17日 2:02
    版主
  • X.X.Y 版主  您好,
    请问一下  您写的代码会比用changed这个事件方法  执行效率高吗?
    谢谢
    2010年3月17日 2:25
  • 使用这个事件的目的是为了让 TextBox 控件输入值改变时能去修改 Filter 属性,你使用其它事件也可以与效率无关。
    知识改变命运,奋斗成就人生!
    • 已标记为答案 server126 2010年3月17日 3:21
    2010年3月17日 3:00
    版主