解决之后把方法写出来,别人看到此贴就知道怎么解决了实际Demo里有Private Sub InitData() Dim records(9) As Record records(0) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.ProductName, "Mishi Kobe Niku", "Teatime Chocolate Biscuits", "Ipoh Coffee") records(1) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.Category, 6, 3, 1) records(2) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.Supplier, "Tokyo Traders", "Specialty Biscuits, Ltd.", "Leka Trading") records(3) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.QuantityPerUnit, "18 - 500 g pkgs.", "10 boxes x 12 pieces", "16 - 500 g tins") records(4) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.UnitPrice, 97.0, 9.2, 46.0) records(5) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.UnitsInStock, 29, 25, 17) records(6) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.Discontinued, False, True, True) records(7) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.LastOrder, New DateTime(2001, 12, 14), New DateTime(2003, 7, 20), New DateTime(2002, 1, 7)) records(8) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.Picture, ImageToByteArray(GetImage("product1.jpg")), ImageToByteArray(GetImage("product2.jpg")), ImageToByteArray(GetImage("product3.jpg"))) records(9) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.Relevance, 70, 90, 50) gridControl1.DataSource = records End Sub ' Private Sub gridView1_CustomRowCellEdit(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs) Handles gridView1.CustomRowCellEdit If e.Column.FieldName <> "Category" Then Dim rec As Record = TryCast(gridView1.GetRow(e.RowHandle), Record) If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Category Then e.RepositoryItem = repositoryItemImageComboBox1 End If If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Supplier Then e.RepositoryItem = repositoryItemComboBox1 End If If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.UnitPrice Then e.RepositoryItem = repositoryItemCalcEdit1 End If If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.UnitsInStock Then e.RepositoryItem = repositoryItemSpinEdit1 End If If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Discontinued Then e.RepositoryItem = repositoryItemCheckEdit1 End If If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Discontinued Then e.RepositoryItem = repositoryItemCheckEdit1 End If If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.LastOrder Then e.RepositoryItem = repositoryItemDateEdit1 End If If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Picture Then e.RepositoryItem = repositoryItemPictureEdit1 End If If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Relevance Then e.RepositoryItem = repositoryItemProgressBar1 End If End If End Sub ' Public Class Record Private fcategory As String Private fproduct1 As Object Private fproduct2 As Object Private fproduct3 As Object Public Sub New(ByVal fcategory As String, ByVal fproduct1 As Object, ByVal fproduct2 As Object, ByVal fproduct3 As Object) Me.fcategory = fcategory Me.fproduct1 = fproduct1 Me.fproduct2 = fproduct2 Me.fproduct3 = fproduct3 End Sub Public ReadOnly Property Category() As String Get Return fcategory End Get End Property Public Property Product1() As Object Get Return fproduct1 End Get Set(ByVal value As Object) fproduct1 = value End Set End Property Public Property Product2() As Object Get Return fproduct2 End Get Set(ByVal value As Object) fproduct2 = value End Set End Property Public Property Product3() As Object Get Return fproduct3 End Get Set(ByVal value As Object) fproduct3 = value End Set End Property End Class
Dim records(9) As Record
records(0) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.ProductName, "Mishi Kobe Niku", "Teatime Chocolate Biscuits", "Ipoh Coffee")
records(1) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.Category, 6, 3, 1)
records(2) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.Supplier, "Tokyo Traders", "Specialty Biscuits, Ltd.", "Leka Trading")
records(3) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.QuantityPerUnit, "18 - 500 g pkgs.", "10 boxes x 12 pieces", "16 - 500 g tins")
records(4) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.UnitPrice, 97.0, 9.2, 46.0)
records(5) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.UnitsInStock, 29, 25, 17)
records(6) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.Discontinued, False, True, True)
records(7) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.LastOrder, New DateTime(2001, 12, 14), New DateTime(2003, 7, 20), New DateTime(2002, 1, 7))
records(8) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.Picture, ImageToByteArray(GetImage("product1.jpg")), ImageToByteArray(GetImage("product2.jpg")), ImageToByteArray(GetImage("product3.jpg")))
records(9) = New Record(DevExpress.XtraGrid.Demos.Properties.Resources.Relevance, 70, 90, 50) gridControl1.DataSource = records
End Sub
'
Private Sub gridView1_CustomRowCellEdit(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs) Handles gridView1.CustomRowCellEdit
If e.Column.FieldName <> "Category" Then
Dim rec As Record = TryCast(gridView1.GetRow(e.RowHandle), Record)
If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Category Then
e.RepositoryItem = repositoryItemImageComboBox1
End If
If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Supplier Then
e.RepositoryItem = repositoryItemComboBox1
End If
If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.UnitPrice Then
e.RepositoryItem = repositoryItemCalcEdit1
End If
If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.UnitsInStock Then
e.RepositoryItem = repositoryItemSpinEdit1
End If
If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Discontinued Then
e.RepositoryItem = repositoryItemCheckEdit1
End If
If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Discontinued Then
e.RepositoryItem = repositoryItemCheckEdit1
End If
If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.LastOrder Then
e.RepositoryItem = repositoryItemDateEdit1
End If
If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Picture Then
e.RepositoryItem = repositoryItemPictureEdit1
End If
If rec.Category = DevExpress.XtraGrid.Demos.Properties.Resources.Relevance Then
e.RepositoryItem = repositoryItemProgressBar1
End If
End If
End Sub
'
Public Class Record
Private fcategory As String
Private fproduct1 As Object
Private fproduct2 As Object
Private fproduct3 As Object Public Sub New(ByVal fcategory As String, ByVal fproduct1 As Object, ByVal fproduct2 As Object, ByVal fproduct3 As Object)
Me.fcategory = fcategory
Me.fproduct1 = fproduct1
Me.fproduct2 = fproduct2
Me.fproduct3 = fproduct3
End Sub Public ReadOnly Property Category() As String
Get
Return fcategory
End Get
End Property Public Property Product1() As Object
Get
Return fproduct1
End Get
Set(ByVal value As Object)
fproduct1 = value
End Set
End Property Public Property Product2() As Object
Get
Return fproduct2
End Get
Set(ByVal value As Object)
fproduct2 = value
End Set
End Property Public Property Product3() As Object
Get
Return fproduct3
End Get
Set(ByVal value As Object)
fproduct3 = value
End Set
End Property
End Class
在CustomRowCellEditForEditing这个事件中处理的。
在grid中添加一隐藏列,当点击第一级下拉框时,将选中的value存入该行的隐藏列中,在点击第二级下拉框时,根据该行隐藏列的值查询出第二级下拉框的数据,为其绑定。