textbox如何直接模糊查询datagridview里当前已有的数据,而不跑到数据库去查找

pengalwin 2010-01-24 10:09:54

textbox如何直接模糊查询datagridview里当前已有的数据,而不跑到数据库去查找?

就是我想textbox模糊查询datagridview里当前的数据,而不是用存储过程到数据库去获取再填充datagridview,这样速度就快很多了。而且,因为是当前已有的数据,当我模糊查询了textbox1后显示满足条件的数据,然后我再textbox2模糊查询——是从当前的数据里再找的(模糊查询了textbox1后显示满足条件的数据),相当于多条件查询!


谢谢!
...全文
1279 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingyuy 2012-06-05
  • 打赏
  • 举报
回复
请问,按照这种方法搜索出来的DataGridView中的数据,修改了数据后怎么保存到数据库,[Quote=引用 15 楼 的回复:]

问题解决了,贴一下代码吧,或许有人会遇到我这种情况。。。
C# code

//用车类别查询
private void textBox3_TextChanged(object sender, EventArgs e)
{

if (textBox3.Text.Trim() == "")
{
……
[/Quote]
yingyuy 2012-06-05
  • 打赏
  • 举报
回复
楼主,我想请教一下
foreach (DataRow dr in dtqy.Select("QiYunZhuanXianLeiBie like '%" + textBox3.Text + "%'"))
{
object[] aArray = new object[dtqy.Columns.Count];
dr.ItemArray.CopyTo(aArray, 0);
mytbqy.Rows.Add(aArray);
}
中的“QiYunZhuanXianLeiBie ”是什么意思呢
Fish 2011-10-07
  • 打赏
  • 举报
回复
wling597074509 2010-07-15
  • 打赏
  • 举报
回复
谢谢楼主分享
zoopark 2010-06-11
  • 打赏
  • 举报
回复
多谢楼主分享
pengalwin 2010-01-25
  • 打赏
  • 举报
回复
13楼的,我12楼写的,是不是和你提供的思路有哪些出入??
wuzhicheng5 2010-01-25
  • 打赏
  • 举报
回复

建议:

1.你在首次绑定datagridview显示数据时,肯定有一数据源,把它设置成本类全局变量,比如是DataTable Dt

2.给你的textbox添加change事件

3.待你在textbox输入模糊查询条件时 如 Name 包含'吴'字,用Dt.Select("Name like %'吴'%", "Id"),按Id排序,重新组成新的数据源,绑定到datagridview中;

以上三步足可以满足你的需求,不需重新访问数据库后台。
祝你好运!
pengalwin 2010-01-25
  • 打赏
  • 举报
回复
6楼的,我写了代码。
首先 DataTable dt;
DataTable dtty = new DataTable();
然后我绑定了dt = gl.select_ZhuanXianXinXi();再dtty克隆dt(dtty = dt.Clone();)
在textBox_TextChanged事件里写
DataRow[] myrows;
myrows= dtty.Select("zhuanXianMingCheng like '%'+textBox4.text+'%'");
foreach (DataRow dr in myrows)
{
object[] aArray = new object[3];
dr.ItemArray.CopyTo(aArray, 0);
dtty.Rows.Add(aArray);
}
dataGridView2.DataSource = dtty.DefaultView;

可是报错找不到列[zhuanXianMingCheng]?这个列在存储过程提取是有的,绑定到dt,然后dtty克隆为什么会找不到?接着我就直接用dt了,也是报一样找不到列的错!


流氓兔 2010-01-25
  • 打赏
  • 举报
回复
缓存到DataSet中,使用DataView的过滤功能就可以实现了吧!
wzp144650 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ffsinbad 的回复:]
把绑定数据源缓存起来,然后在缓存的数据源中找,不是更好吗
[/Quote]

up
pengalwin 2010-01-25
  • 打赏
  • 举报
回复
7楼的方法昨晚我用过了,用visible,报错的
与货币管理器的位置关联的行不能设置为不可见。

说明是不合法的
shighui 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ffsinbad 的回复:]
把绑定数据源缓存起来,然后在缓存的数据源中找,不是更好吗
[/Quote]



同意!
fanlose2 2010-01-25
  • 打赏
  • 举报
回复
建议使用Contains()方法,实现类似模糊查询。

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (!dataGridView1.Rows[i].Cells[0].Value.ToString().Contains(textBox1.Text))
{
//找到不匹配行 ,隐藏掉
dataGridView1.Rows[i].Visible = false;
}
}
peng_yaoming 2010-01-25
  • 打赏
  • 举报
回复
挺好的( ⊙o⊙ )哇
pengalwin 2010-01-25
  • 打赏
  • 举报
回复
问题解决了,贴一下代码吧,或许有人会遇到我这种情况。。。

//用车类别查询
private void textBox3_TextChanged(object sender, EventArgs e)
{

if (textBox3.Text.Trim() == "")
{
//button1_Click(sender, e);
dataGridView2.DataSource = gl.select_ZhuanXianXinXi_QiYun();
datagrid2_jianse();//间色
}
else
{
mytbqy = dtqy.Clone();//mytbqy 是全局dt
foreach (DataRow dr in dtqy.Select("QiYunZhuanXianLeiBie like '%" + textBox3.Text + "%'"))
{
object[] aArray = new object[dtqy.Columns.Count];
dr.ItemArray.CopyTo(aArray, 0);
mytbqy.Rows.Add(aArray);
}
dataGridView2.DataSource = mytbqy.DefaultView;
datagrid2_jianse();//间色
dtqy = mytbqy;//这里重新赋值实现dataGridView当前数据内部查询
}
}


ffsinbad 2010-01-24
  • 打赏
  • 举报
回复
把绑定数据源缓存起来,然后在缓存的数据源中找,不是更好吗
kingcsx666 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pengalwin 的回复:]
2楼其实和1楼的是一样的。
我还要,怎么样只显示满足条件的数据?
[/Quote]

页面缓存绑定网格的数据集(datatable)

通过textbox模糊查找,过滤(datatable.rowfiter)数据集的数据,在重新绑定一下网格

跟在数据库模糊查找是一样的,只不过是过滤内存表,速度当然快多了
pengalwin 2010-01-24
  • 打赏
  • 举报
回复
2楼其实和1楼的是一样的。
我还要,怎么样只显示满足条件的数据?
pengalwin 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
            for(int i=0;i <dataGridView1.Rows.Count;i++)
            {
              if (dataGridView1.Rows[i].Cells[0].Value.ToString().Equals(textBox1.Text))
                {
                    //找到匹配行
                }
            }

[/Quote]

//找到匹配行 这里要怎么写?

这里根据if找到符合条件的数据了,要怎么才能只显示这些满足条件的数据?可以说明白点吗?
真的不懂,谢谢了
pxcai 2010-01-24
  • 打赏
  • 举报
回复
for(int i=0;i <dataGridView1.Rows.Count;i++)
{
if (dataGridView1.Rows[i].Cells[0].Value.ToString().IndexOf(textBox1.Text)!=-1)
{
//条件成立时表示单元格数据源符合文本框中数据
}
}
加载更多回复(1)

110,533

社区成员

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

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

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