c# winform 多条件查找

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# winform 多条件查找相关的知识,希望对你有一定的参考价值。

我现在有2个textbox 一个是用户名,另一个是电话 现在想对这两个进行条件查找datagridview里的数据 string a = this.textBox2.Text.ToString().Trim(); string str = "select * from 表1 where 电话 like '%" + a + "%'"; SqlDataAdapter da = new SqlDataAdapter(str, conn); da.Fill(ds, "表1"); dataGridView1.DataSource = ds.Tables["表1"].DefaultView; string b = this.textBox1.Text.ToString().Trim(); string co = "select * from 表1 where 用户名 like '%" + a + "%'"; 这是我的一段代码,已经能够对用户名进行查找,对电话进行查找的时候 string str = "select * from 表1 where 电话 like '%" + a + "%'"; 里str显示已经定义过 该怎么办

先把所有的结果 查询出来,不加条件放入到DataTable中,然后DataTable中有个Select方法,用这个,返回的是行数组,非常好用。 下面有个例子 dtShow是需要显示到DataGridView的表信息 DataTable dtShow; dtPrison是所有的信息DataTable表,总信息表 rows 是 DataRow[] rows; dttmp是临时的DataTable表 dtShow = dtPrison.Clone(); if (!string.IsNullOrEmpty(cbSheng1.Text)) rows = dtPrison.Select("省 = '" + cbSheng1.Text + "'");//省是否为空,相当于第一个文本框条件 foreach (DataRow thisrow in rows) dtShow.Rows.Add(thisrow.ItemArray); else dtShow = dtPrison.Copy(); if (!string.IsNullOrEmpty(cbShi1.Text))//市是否为空,相当于你第二个文本框条件 dttmp = dtShow.Copy(); rows = dttmp.Select("市 = '" + cbShi1.Text + "'"); dtShow.Clear(); foreach (DataRow thisrow in rows) dtShow.Rows.Add(thisrow.ItemArray); if (!string.IsNullOrEmpty(cbQu1.Text))//区是否为空相当于第三个文本框条件 dttmp = dtShow.Copy(); rows = dttmp.Select("区 = '" + cbQu1.Text + "'"); dtShow.Clear(); foreach (DataRow thisrow in rows) dtShow.Rows.Add(thisrow.ItemArray); dataGridView.DataSource=dtShow;.//显示查询完毕后的结果 参考技术A 用and就可以了 最终生成SQL是这样子的,你可以参考着弄 select * from 表1 where 电话 like '%123%' and 用户名 like '%abc%' 你的代码风格需要注意: 1.textBox2.Text 本来就是字符串,不需要ToString 浪费 2.应该判断文本是否有输入,否则没有输入文本的时候,like会出错,因为生成的SQL会是 like '%%' 3.表名 列名,最好加上方括号,比如 [表1] 这是好习惯

C# winform 多线程更新数据,UI卡顿现象。

我要通过串口采集数据,然后在软件上显示出来。使用线程来采集,想做成异步程序。不知道哪错了,有卡顿现象。主要代码如下:
//读取D寄存器信息
private void ReadPLC_D_Date()

int i = 0;
foreach (XinYangClass.PLCDateMain m in PLC_D_List)

string DValue = ReadPLCDate_D(m.PName, m.PClass);
if (DValue != m.PValue)

DDate[i] = Convert.ToInt32(DValue);

i = i + 1;

///添加所有事件
ReadPLC_M_Date();
ShowDate_D();//显示D数据
ShowDate_M();//显示M数据


Thread RD;//读取D数据的线程
delegate void MyDelegate();
void doWork()

MyDelegate w = new MyDelegate(ReadPLC_D_Date);
while (true)

this.Invoke(w);
Thread.Sleep(500);



/// 窗口加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormLinkRun_Load(object sender, EventArgs e)

//启动线程
RD = new Thread(doWork);
RD.Start();

参考技术A Invoke后只应该加刷新界面的代码,读取代码(ReadPLC_D_Date)应该放到while里面,不要放invoke里面。追问

能给出修改后的代码吗?

追答

我没有串口硬件无法测试。

本回答被提问者采纳
参考技术B 500ms刷新一次的话 应该不至于卡顿
不过也得看你更新UI使用的方法 如果里面有循环刷新一些客户区比较大的控件的时候 比如DataGridView 则需要注意方法 尽量减少不必要的刷新追问

UI里面,只刷新 Label 。 但是软件运行的时候,都会卡顿。

追答

你说的卡顿是主界面卡?还是数据显示不及时?

以上是关于c# winform 多条件查找的主要内容,如果未能解决你的问题,请参考以下文章

C# winform多线程案例

c# 多线程 ui winform界面

C# winform 多线程更新数据,UI卡顿现象。

C# winform 多form传递数据问题

c# winform 窗口控件多,就会加载很慢???

c#.net winform 选择性多条件查询数据库。