DataGridView中的查询问题

renegade_wyc 2012-06-12 11:53:44
本人大菜鸟一枚……
DataGridView我已经绑定了数据库,因此在其中显示的是数据库中的内容,我现在想的是:设置一个textbox1(用于输入查询的文字),一个combobox1(用于限定查询的种类:例如不限、学生、教师……)和一个button1用于确定开始查询,那么我应该如何实现呢
...全文
249 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
熙风 2012-06-12
  • 打赏
  • 举报
回复
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
allen0118 2012-06-12
  • 打赏
  • 举报
回复
我做过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);
}
}

}
renegade_wyc 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

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

>.< 本人新手,想看看代码实例,劳烦您了
renegade_wyc 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

有6列,我想查询的是包含textbox1输入的字符的所有行,当然列也要显示出来
bdmh 2012-06-12
  • 打赏
  • 举报
回复
如果绑定了datatable,那么datatable的select方法可以方便你查询
__天涯寻梦 2012-06-12
  • 打赏
  • 举报
回复
DataGridView 有哪些列,你要全文查询还是只对某几列查询
renegade_wyc 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

DataRow[] drs = 全局变量DataTable.Select("你要查找列名 like '%" + textBox1.Text + "%'");
改为
DataRow[] drs = 全局变量DataTable.Select("你要查找列名 like '%" + textBox1.Text + "%'" + (combobox.SelectedText != null ? ("另……
[/Quote]
谢谢
__天涯寻梦 2012-06-12
  • 打赏
  • 举报
回复
DataRow[] drs = 全局变量DataTable.Select("你要查找列名 like '%" + textBox1.Text + "%'");
改为
DataRow[] drs = 全局变量DataTable.Select("你要查找列名 like '%" + textBox1.Text + "%'" + (combobox.SelectedText != null ? ("另一列名 = '" + combobox.SelectedText + "'") : null));
renegade_wyc 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 10 楼 的回复:
引用 9 楼 的回复:

引用 3 楼 的回复:
引用 1 楼 的回复:

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


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

我的意思是,你是要匹配所有列中内容是否包含 textbox 输入的内容,还是某几个列包含就可以了,combobox1 ……
[/Quote]

例如我textbox1里输入张三,combobox1里就是选择额外的查询条件(在另外一列中)如“学生”“教师”,combobox为空的时候也能查询
__天涯寻梦 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
引用 9 楼 的回复:

引用 3 楼 的回复:
引用 1 楼 的回复:

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


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

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


就一个列……
[/Quote]
如果你是用下面这种方式查询绑定数据的
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 限定的什么?
牛哥_ 2012-06-12
  • 打赏
  • 举报
回复
不太懂^^……
renegade_wyc 2012-06-12
  • 打赏
  • 举报
回复
先谢谢各位高手~~感激不尽
renegade_wyc 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 3 楼 的回复:
引用 1 楼 的回复:

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


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

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

就一个列包含
__天涯寻梦 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 1 楼 的回复:

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


有6列,我想查询的是包含textbox1输入的字符的所有行,当然列也要显示出来
[/Quote]
我的意思是,你是要匹配所有列中内容是否包含 textbox 输入的内容,还是某几个列包含就可以了,combobox1 限定的哪列?
chinnsyuutou 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

C# code
DataRow []dr=DataTable.select("type='"+combobox1.text+"'");;
DataTable copytable = DataTable.Clone();
for (int i = 0; i <= row.Length - 1; i++)
{
copyta……
[/Quote]
差不多就是这样
chinnsyuutou 2012-06-12
  • 打赏
  • 举报
回复
既然是datagridview绑定datatable的,那可以使用datatable的查询
DataTable dt = new DataTable();
dt.Select("", "");

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧