2016-06-13 61 views
0

我有一个列表,当dgv1填充时,在dgv2中填充streetId和streetName,我有一个comboboxcolumn列表,因此我填充街道,但是我填充有cabName cmbxcolumn我需要根据到第一列选择(streetName)。我有一个表,照相机对其进行过滤:当基于列表项的选择过滤组合框时有重复的值

camIp cabCode streetId camType camCode 
    11.5 34  9 camtype1 PTZ 
    11.7 34  9 camtype2 C 
    12.1 19  10 camtype2 A 
    12.2 19  10 camtype3 B 
    12.3 19  10 camtype4 PTZ 

和一张桌子cabCode:

cabCode cabName 
19  cabName1 
34  cabName2 
35  cabName3 

这里我已经试过: 我为相机创建了一个数据表:

DataTable CamerastblUsage = new DataTable(); 
SqlCommand cmd5 = cnn.CreateCommand(); 
cmd5.CommandText = "SELECT cam.camIp,cam.cabCode,c.cabName,cam.streetId ,cam.camType,cam.camCode from camera cam , cab c where cam.cabCode = c.cabCode"; 

BindingSource unfilteredCamerasUsageBS = new BindingSource(); 
DataView undv2 = new DataView(CamerastblUsage); 
unfilteredCamerasUsageBS.DataSource = undv2; 
Column23.DisplayMember = "cabName"; 
Column23.ValueMember = "camIp"; 
Column23.DataSource = unfilteredCamerasUsageBS; 

// this binding source is where I perform my filtered view 
BindingSource filteredCamerasUsageBS = new BindingSource(); 
DataView dv6 = new DataView(CamerastblUsage); 
filteredCamerasUsageBS.DataSource = dv6; 

然后我使用的cellbeginedit事件:

if (e.ColumnIndex == Column23.Index) 
{ 
//filter cabCode combobox based on streetId selected in column index 0 
DataGridViewComboBoxCell dgcb = (DataGridViewComboBoxCell)dataGridView3[e.ColumnIndex, e.RowIndex]; 

dgcb.DataSource = filteredCamerasUsageBS; 
this.filteredCamerasUsageBS.Filter = "streetId = " + 
Convert.ToString(this.dataGridView3[e.ColumnIndex - 1, e.RowIndex].Value.ToString()); 
} 

但选择streetName时,例如streetName1具有编号10中,过滤器在cabName comboboxcolumn给出相同cabcode 19三个相同的名称:

cabName3 
cabName3 
cabName3 

我需要过滤它显示只有一个名字,我认为有一个错误的过滤,有没有人有一个想法。

回答

0

是的,它应该是因为在你的cameracabCode = 19重复3次,你加入了,所以导致重复的数据。看起来像你可以使用ROW_NUMBER()功能在这里像

SELECT * FROM (
SELECT cam.camIp, 
cam.cabCode, 
c.cabName, 
cam.streetId , 
cam.camType, 
cam.camCode, 
ROW_NUMBER() OVER(PARTITION BY cam.camCode ORDER BY cam.camCode) AS rn 
from camera cam 
join cab c 
on cam.cabCode = c.cabCode) XXX 
WHERE rn = 1; 
+0

它不工作,你试过了吗?有没有办法将cab表用作数据源,然后通过其他方式进行绑定和过滤 –

相关问题