2013-08-01 55 views
2

我想用自定義的方式在datagridview中呈現自定義類,我可以完全控制它。例如,如果我現在簡單地將列表綁定到datagridview,則將爲每個公共屬性創建一列。即使我使用DataGridViewTextBoxColumn的DataPropertyName屬性,也會創建自定義類的每個附加屬性的其他列。如何將自定義類的通用列表綁定到datagridview,並只顯示VB.NET中的特定屬性?

我知道我可以自己填充datagridview,但即使是VB.NET初學者,我也覺得這不是一個好的解決方案。是嗎?

我想我記得有可能實現一些接口,以幫助指定一個類是如何在datagridview控件中表示的。

有人能指出我是最好的和最有效的解決方案嗎?

+1

看看這個答案http://stackoverflow.com/a/16744811/2387010 – Chris

+0

感謝那肯定解決了一些問題。然而,我仍然對能夠以更自定義的方式在datagridview中表示自定義類的方式感興趣,而不必爲自定義類中的此目的創建新屬性。作爲初學者,我只能想到在自定義類中創建一個函數,該函數返回一個專門填充了我想要的自定義類數據和列生成屬性的datagridviewrow。但肯定必須有更好的方法來做到這一點! – SuppaiKamo

+0

如果我正確理解你想要的東西,是的,你可以在基類中創建自定義屬性,但這不是必需的。您還應該考慮使用Datagridview事件,例如[DataGridView.CellFormatting](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.cellformatting(v = vs.110).aspx )您可以根據基類中的其他屬性顯示自定義數據的事件。 – Chris

回答

3

您可以使用Browsable attribute

如果下面的類的List綁定到DataGridView

Class Person 

    Public Property Name As String 

    Public Property Department As String 

    <System.ComponentModel.Browsable(False)> 
    Public Property SomethingInternal As String 

End Class 

只有NameDepartment列將被創建。

簡單的例子:

Using f As New Form 
    Dim g = New DataGridView With { 
     .Dock = DockStyle.Fill, 
     .DataSource = { New Person With 
         { 
          .Name = "Foobar", 
          .Department = "BarFoo", 
          .SomethingInternal = "Don't show this" 
         }}} 
    f.Controls.Add(g) 
    f.ShowDialog() 
End Using 

enter image description here

3

DataGridView有AutoGenerateColumns屬性,默認爲True。將其設置爲False並指定您需要的列DataGridView -> Columns標記

相關問題