求精简一下代码

谁学逆向工程 2019-01-22 04:35:05
过程的思路是,在数据库的表中去掉重复查一个列,这个列的每一项如果出现在 ListBox 中则什么也不做,如果不在 ListBox 中则添加到 ListBox 中
            MySqlCommand command = new MySqlCommand("select distinct 提交时间 from 价签单", mysql.mycon);
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{

for (int i = 0; i < listBox1.Items.Count; i++)
{
if (reader.GetString(0).Equals((string)listBox1.Items[i]))
{
break;
}
else
{
if (i == listBox1.Items.Count - 1)
listBox1.Items.Add(reader.GetString(0));
else
continue;
}
}
...全文
184 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2019-01-22
  • 打赏
  • 举报
回复
while (reader.Read()) { if(listBox1.Items.IndexOf(reader.GetString(0)) < 0) { listBox1.Items.Add(reader.GetString(0)); } }
游北亮 2019-01-22
  • 打赏
  • 举报
回复
指出一下你的代码问题吧, 1、你用的是:mysql.mycon,估计你对数据库连接用了单例,单机不存在多线程没啥问题, 用了多线程,你就等着各种奇葩问题吧,比较建议的做法是,随用随new using(var con = new MySqlConnection("xxx")){ xxx } 数据库本身有连接池的,不需要考虑太多; 2、你的MySqlCommand和MySqlReader,都没有显示释放,存在资源泄露, 所有的连接对象都要用using包起来,如: using (MySqlCommand command = new MySqlCommand("select distinct 提交时间 from 价签单", mysql.mycon)) using (MySqlDataReader reader = command.ExecuteReader()) { }
Hubert_Biyo 2019-01-22
  • 打赏
  • 举报
回复
你的实现思路可以换一种方式,比如 listBox1.Items 数据来源是哪里, 是否可以和你现在查询的表 “价签单” JOIN 一下再进行读取,这样减少了后台的逻辑处理。我觉得数据来源最好统一处理; 附上我整理的代码:
wanghui0380 2019-01-22
  • 打赏
  • 举报
回复
如果不是用绑定写,如果是一定要一行一行加dt也舒坦点

var olddt=假设你原来保留的原始dt
var newdt=从数据库获取新的dt

olddt.marge(newdt) //合并他们

var rows=olddt.select(Select("","", DataViewRowState.Added)) //只选择新增的

然后就是遍历rows直接添加

wanghui0380 2019-01-22
  • 打赏
  • 举报
回复
如果是用DataTable 读 和绑定方式写代码任务就轻松点

var olddt= ListBox.DataSource as DataTable
var newdt=读dt

olddt.marge(newdt)

listbox.datasource=olddt;

就这样几行就行。至于闪烁问题,如果是定时器时间短,怎么都不好处理闪烁。开双缓冲也许有效也许没效。所以建议不必时时加,对于客户来说缓冲1分钟的数据都能接受,到底是何种项目,他连1分钟的通知都不愿意等呢?
wanghui0380 2019-01-22
  • 打赏
  • 举报
回复
因为你是使用的reader,所以只能一行一行读,这里简化不了

至于item这块么,可以用linq的any方法判定

if(!listBox.items.Any(c=>xxxxxx))
{
添加
}
谁学逆向工程 2019-01-22
  • 打赏
  • 举报
回复
引用 3 楼 第27个Bug 的回复:
把整个listBox1清掉,再全部添加进去不就好了吗。
一开始用的你这方法,但是listbox 闪烁太严重了,我这是在 Timer 中调用的代码
键盘敲出字 2019-01-22
  • 打赏
  • 举报
回复
把整个listBox1清掉,再全部添加进去不就好了吗。
谁学逆向工程 2019-01-22
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:
csdn这个编辑器有问题的,请不要在 使用代码框,以后再用颜色标签,他们认不出的 这标记的,俺们已经看不清你的代码了,请重新贴代码吧
我这显示都正常啊,我这用的谷歌浏览器,你那需要什么样式的我没看明白,要纯文本啊? MySqlCommand command = new MySqlCommand("select distinct 提交时间 from 价签单", mysql.mycon); MySqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { for (int i = 0; i < listBox1.Items.Count; i++) { if (reader.GetString(0).Equals((string)listBox1.Items[i])) { break; } else { if (i == listBox1.Items.Count - 1) listBox1.Items.Add(reader.GetString(0)); else continue; } }
wanghui0380 2019-01-22
  • 打赏
  • 举报
回复
csdn这个编辑器有问题的,请不要在 使用代码框,以后再用颜色标签,他们认不出的

这标记的,俺们已经看不清你的代码了,请重新贴代码吧

110,569

社区成员

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

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

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