2017-09-12 39 views
-1

製作項目比方說,我有我的窗體上的兩個DataGridViews。 DGV中的列全部不同。但是,兩個網格的第一列都稱爲「ProductID」。 「ProductID」列被格式化爲組合框。對於第一個網格,我將默認組合框選項爲1-10。如何將第二個DGV組合框設置爲只有在第一個DGV中已經選擇的選項?從以前的控制

因此,如果我填寫了第一個DGV的兩行,第一個ProductID爲'1',第二行爲'5',則第二個DataGridView上'ProductID'的唯一選項將是'1'和' 5' 。非常感謝,希望我提供了充足的信息。

+0

顯示dgvs如何填充會幫助一些代碼。 – djv

+0

DGV沒有以編程方式填充。用戶通過表格上的DGV提供輸入。 DGV的數據源是DataTables,它是預定義的,因爲我需要從它們生成xml文件。 –

+0

組合框如何在其中獲得1,2,3,...,10? – djv

回答

0

這應該工作

Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged 
    Dim vals = DataGridView1. 
     Rows.OfType(Of DataGridViewRow). 
     Where(Function(r) r.Cells(0).Value IsNot Nothing). 
     Select(Function(r) r.Cells(0).Value). 
     Distinct() 
    Me.Column2.Items.Clear() 
    For Each v In vals 
     Me.Column2.Items.Add(v.ToString()) 
    Next 
End Sub 

在LINQ:

  • 獲取行。必須與OfType投獲得的IEnumerable
  • 過濾器僅行與價值觀
  • 選擇值(字符串)
  • 以一個不同的子集,不會有兩個7級的時候7選擇兩次

然後

  • 清除任何現有的項目
  • 添加項目

image:

DataGridView1是一個在每個在第一列中的組合框的10組的ID。這是通過索引代碼中r.Cells(0)

column1的引用爲索引0是以上

列2中描述的列的名稱在第二DataGridView中柱,其中,要篩選的物品的名稱

如果您在dgv 2中選擇了一個值,然後在dgv1中取消選擇了一個值,則會出現異常。由你來處理。

+0

非常感謝您爲我工作!我可以問爲什麼我需要以編程方式創建DataGrid?它們只需要在運行時存在以輸入數據。數據不需要被存儲,因爲它立即被寫入xml文件 –

+0

因爲你可能並不總是有ProductID 1到10.如果你添加另一個產品,你是否必須重新編譯你的應用程序?!? – djv