本人大菜鸟一枚……
DataGridView我已经绑定了数据库,因此在其中显示的是数据库中的内容,我现在想的是:设置一个textbox1(用于输入查询的文字),一个combobox1(用于限定查询的种类:例如不限、学生、教师……)和一个button1用于确定开始查询,那么我应该如何实现呢

解决方案 »

  1.   

    DataGridView 有哪些列,你要全文查询还是只对某几列查询
      

  2.   

    如果绑定了datatable,那么datatable的select方法可以方便你查询
      

  3.   


    有6列,我想查询的是包含textbox1输入的字符的所有行,当然列也要显示出来
      

  4.   


    >.<  本人新手,想看看代码实例,劳烦您了
      

  5.   

    我做过DataGridView查询的功能,用了用户控件,用户控件上就是一个文本框和一个按钮,你可以增加一个下拉列表,具体的看这边文章:http://www.cnblogs.com/allen0118/archive/2012/05/14/2498895.html
    查找方法:
            public static int RowCount = 0;
            ///记录已查找过的行数 
            public static int SetGetRow
            {
                set
                {
                    if (RowCount != value) { RowCount = value; }
                }
                get { return RowCount; }
            }
            /// <summary>
            /// 查找相
            /// </summary>
            /// <param name="_FindName">要查找的字符串内容 </param>
            /// <param name="_Gr">要查找的表格名称 </param>
            public void Find_Grid(string _FindName, DataGridView _Gr)
            {
                if (_FindName != "")
                {
                    if (_Gr.Rows.Count > 0)
                    {
                        _FindName = _FindName.ToUpper().Trim();                    int row = _Gr.Rows.Count;//得到总行数 
                        int cell = _Gr.Rows[1].Cells.Count;//得到总列数 
                        int _length = _FindName.Trim().Length;
                        for (int i = SetGetRow; i < row; i++)//得到总行数并在之内循环 
                        {
                            for (int j = 0; j < cell; j++)//得到总列数并在之内循环 
                            { //精确查找定位
                                if (_FindName.Trim().ToUpper() == _Gr.Rows[i].Cells[j].Value.ToString().Trim().ToUpper())
                                { //对比TexBox中的值是否与dataGridView中的值相同(上面这句) 
                                    _Gr.CurrentCell = _Gr[j, i];//定位到相同的单元格 
                                    _Gr.Rows[i].Selected = true;//定位到行 
                                    SetGetRow = i + 1; return;//返回
                                } //模糊查找定位(连续长度相同才认为是相似) /*************模糊查找定位算法 * 从1到对应的表格内容长度查找 * 先找到第一个字符与要查找的内容对应的第一个字符相同的然后查找后面的相同长度的内容是否相同,相同则定位到此行 */ 
                                for (int k = 0; k < _Gr.Rows[i].Cells[j].Value.ToString().Trim().Length; k++)
                                {
                                    if (_length <= _Gr.Rows[i].Cells[j].Value.ToString().Trim().Length - k)//判断要查找内容的长度是否小于对比的内容的长度 
                                    {
                                        if (_FindName.Trim().Substring(0, 1) == _Gr.Rows[i].Cells[j].Value.ToString().Trim().Substring(k, 1))//判断第一个字符是否与要对比的内容的第一个字符相同 
                                        {
                                            if (_FindName.Trim() == _Gr.Rows[i].Cells[j].Value.ToString().Trim().Substring(k, _length))//判断是查找内容与对比内容否相等 
                                            {
                                                _Gr.CurrentCell = _Gr[j, i];//定位到相同的单元格 
                                                _Gr.Rows[i].Selected = true;//定位到行 
                                                SetGetRow = i + 1; return;//返回 
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        SetGetRow = 0;
                        MessageBox.Show("没有找到相关记录!", "快速定位", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }        }
      

  6.   

    DataRow []dr=DataTable.select("type='"+combobox1.text+"'");;
            DataTable copytable = DataTable.Clone();
             for (int i = 0; i <= row.Length - 1; i++)
             {
                copytable.ImportRow((DataRow)row[i]);
            }在用copytable绑定DataGridView
      

  7.   

    既然是datagridview绑定datatable的,那可以使用datatable的查询
     DataTable dt = new DataTable();
    dt.Select("", "");
      

  8.   

    我的意思是,你是要匹配所有列中内容是否包含 textbox 输入的内容,还是某几个列包含就可以了,combobox1 限定的哪列?
      

  9.   

    如果你是用下面这种方式查询绑定数据的
    DataTable dtbl = new DataTable();
    SqlDataAdapter sda = ....;
    sda.Fill(dtbl);
    就声明一个 DataTable 全局变量,把查询结果赋值给这个全局变量,然后 button1 的事件里就
    DataRow[] drs = 全局变量DataTable.Select("你要查找列名 like '%" + textBox1.Text + "%'");
    DataTable ndtbl = 全局变量DataTable.Clone();
    for (int i = 0; i < drs.Length; i++)
    {
        ndtbl.ImportRow(drs[i]);
    }还是那个问题 combobox1 限定的什么?
      

  10.   


    例如我textbox1里输入张三,combobox1里就是选择额外的查询条件(在另外一列中)如“学生”“教师”,combobox为空的时候也能查询
      

  11.   

    DataRow[] drs = 全局变量DataTable.Select("你要查找列名 like '%" + textBox1.Text + "%'");
    改为
    DataRow[] drs = 全局变量DataTable.Select("你要查找列名 like '%" + textBox1.Text + "%'" + (combobox.SelectedText != null ? ("另一列名 = '" + combobox.SelectedText + "'") : null));