2016-06-13 11 views
0

dgv1が満たされたときにstreetIdとstreetNameが埋め込まれたリストがあり、dgv2にはstreetNameのcomboboxcolumnがあります。リストアイテムからの選択に基づいてコンボボックスをフィルタリングするときに重複値を持つ場合

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 

私はテーブルのカメラを持っている.I第一列選択(streetName)に基づいて、それをフィルタリングする必要がcmbxcolumn cabNameを持っています: 私はカメラのデータテーブルを作成しました:

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 

フィルタリングする必要があります。名前を1つだけ表示する必要があります。フィルタリングに間違いがあると思う人はいませんか?

答えて

0

はい、あなたのcameraテーブルcabCode = 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

それは動作していない、それを試してみましたか?タクシーのテーブルをデータソースとして使用して、他の方法でバインドしてフィルタリングする方法はありますか –

関連する問題