问题描述
根据table1的ID刷选出table2的数据,比如我查询table2的ID"51100和51101"是不包含在table1里面的,就不要显示。在不使用循环比较2个列值?
解决方案
解决方案二:
在数据源当中比较会快很多,尽量想办法在数据源当中比较吧,界面还要取值,这是一种浪费行为。如果你觉得不能那样做,方法还是挺多的,那你可以用datagridview的过滤方法来进行筛选,也可以用把数据视图转化为Table再进行比对,最不济的,你还可以循环比对。
解决方案三:
数据源里解决这个问题吧,一行代码即可过滤了,你在表格里对比,除了像楼上说的“浪费”时间,还会变得很丑,数据多的时候如果要翻页的话,会出现每页的记录数不一致,你说是不是让人困惑?
解决方案四:
引用1楼AisaC的回复:
在数据源当中比较会快很多,尽量想办法在数据源当中比较吧,界面还要取值,这是一种浪费行为。如果你觉得不能那样做,方法还是挺多的,那你可以用datagridview的过滤方法来进行筛选,也可以用把数据视图转化为Table再进行比对,最不济的,你还可以循环比对。
我是从Excel里面抓出来的,没有用到sql.定义的privateDataTabletd;然后再add到datagridview的。现在就不知道怎么比较2个datagridview
解决方案五:
object[]values=newobject[]{id.ToString(),name[0].Value};td.Rows.Add(values);
我是这样把所有ID姓名add到datagridview2里面的,现在就是不知道怎么去比较2个datagridview。只显示包含在datagridview1ID里面的姓名。
解决方案六:
你在把你table1数据取得的过程贴出来。
解决方案七:
引用5楼ajianchina的回复:
你在把你table1数据取得的过程贴出来。
MatchCollectionmc=reg.Matches(s);//s就是我的数据源再下面的循环筛选出来foreach(varstrinmc.Cast<Match>().Select(x=>x.Value).Distinct().Reverse())//移除重复的只保留最后一个出现的SN号{BTS_tb.Rows.Add(newobject[]{str});}this.dataGridView1.DataSource=BTS_tb.DefaultView;
解决方案八:
MatchCollectionmc=reg.Matches(s);//s就是我的数据源再下面的循环筛选出来List<string>list1=mc.Cast<Match>().Select(x=>x.Value).Distinct().ToList();list1.Reverse();this.dataGridView1.DataSource=list1;foreach(...){if(list1.Contains(id.ToString())){object[]values=newobject[]{id.ToString(),name[0].Value};td.Rows.Add(values);}}
解决方案九:
你的第二个表的数据获取过程没写完整,其实也不需要循环的,第二个表的数据里可以直接查询后绑定,我这只是给你做了个筛选的例子,你还可以进一步简化代码
解决方案十:
在绑定之前不是有两个数据源嘛,直接在数据源里面循环过滤就行了。
解决方案十一:
引用8楼ajianchina的回复:
你的第二个表的数据获取过程没写完整,其实也不需要循环的,第二个表的数据里可以直接查询后绑定,我这只是给你做了个筛选的例子,你还可以进一步简化代码
privatevoidbts_btn_Click(objectsender,EventArgse){this.richTextBox1.Text="";//this.listBox1.Items.Clear();FolderBrowserDialogdialog=newFolderBrowserDialog();if(dialog.ShowDialog()==DialogResult.OK){foldPath=dialog.SelectedPath;DirectoryInfoTheFolder=newDirectoryInfo(foldPath);fileName=Path.GetFileName(dialog.SelectedPath);//获取当前打开文件夹名称StringBuildersb=newStringBuilder();foreach(FileInfoNextFileinTheFolder.GetFiles()){stringtempStr=File.ReadAllText(NextFile.FullName,Encoding.GetEncoding("GB2312"));//sb.Append(tempStr);}this.richTextBox1.Text=sb.ToString();this.listBox1.Visible=true;if(fileName.Contains("BTS")){strings=richTextBox1.Text;Regexreg=newRegex(@"(?is)[0-9a-zA-Z]{16}");MatchCollectionmc=reg.Matches(s);List<string>dateList=newList<string>();foreach(varstrinmc.Cast<Match>().Select(x=>x.Value).Distinct().Reverse())//移除重复的只保留最后一个出现的SN号{BTS_tb.Rows.Add(newobject[]{str});stringaa=str.Substring(8,2)+"年"+str.Substring(10,2)+"周";if(!dateList.Contains(str))dateList.Add(aa);}listBox1.DataSource=dateList;this.dataGridView1.DataSource=BTS_tb.DefaultView;intcount=this.dataGridView1.RowCount;this.label2.Text="总计:"+(count-1).ToString();this.label1.Text=dateList.Count.ToString();this.label5.Text=fileName;
解决方案十二:
这里的这段代码listBox1是不可能导致重复数据的,如果你还是存在重复数据,我怀疑你的这个listBox1控件是否被绑定了相关事件,你删掉listBox1,重新拖一个上来,重命名为listBox1,再看一下。