动态地将列添加到datagrid或使用列表中的特定列生成datagrid

时间:2015-02-26 09:39:10

标签: wpf vb.net data-binding datagrid datagridcolumn

我几天来一直在与datagrid databinding挣扎..

我正在尝试从datagrid个自定义对象动态生成list。 由于我需要显示的列表对象属性的数量可能会发生变化,因此我不知道确切的列数和标题。

所以我想,我只是动态地添加我需要的列并为它们创建绑定(到特定的对象属性)。之后,我会根据绑定用datagrid填写list数据。

例如:

我创建了一个空的datagrid

   <DataGrid x:Name="MyDataGrid" AutoGenerateColumns="false" ItemsSource="{Binding}" Margin="0,0,0,31" Grid.RowSpan="2">
   </DataGrid>

我创建了我的列表,用于存储我的数据和数据对象:

Public Class Res
    Public Shared TableData As New List(Of DataItem)
End Class

Public Class DataItem
    Public Property Name() As String
    Public Property MyProperty() As String
    Public Property Prop() As String
    Public Property Prop1() As String
End Class

现在,我想只显示Name中的datagrid列,因此我添加了一个具有特定绑定的列(可能这是问题所在,但我无法做到弄清楚):

    Dim col As New DataGridTextColumn
    Dim bb As New Binding

    bb.Path = New PropertyPath("Name")
    bb.Mode = BindingMode.TwoWay
    bb.Source = Res.TableData

    col.Binding = bb
    col.Header = "Name"

    MyDataGrid.Columns.Add(col)

然后,我最终创建了一些数据并将其添加到我的列表中:

    Dim entry As New DataItem

    entry.Name = "Test Name"
    entry.MyProperty = "Test Property"
    entry.Prop = "one Entry"

    Res.TableData.Add(entry)

    Me.MyDataGrid.ItemsSource = Res.TableData

现在的结果是,整个列都填充了相同的数据。我的意图是只填充与确切list项对应的行。例如,如果我以后想要使用不同的&#34;名称&#34;添加另一个项目到list。它应该在datagrid中显示为具有不同&#34;名称&#34;的另一行。同样。

1 个答案:

答案 0 :(得分:2)

我建议你将网格绑定到List属性,让AutoGenerateColumns = True并听取AutoGeneratingColumn,你决定是否要将该列添加到网格中。