将列动态添加到数据网格或使用列表中的特定列生成数据网格

Posted

技术标签:

【中文标题】将列动态添加到数据网格或使用列表中的特定列生成数据网格【英文标题】:Dynamically add a column to datagrid or generate datagrid with specific columns from a list 【发布时间】:2015-04-28 14:51:00 【问题描述】:

我已经和datagrid databinding 斗争了好几天了..

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

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

例如:

我创建了一个空的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

现在,假设我只想在我的datagrid 中显示Name 列,所以我添加了一个具有特定绑定的列(大概这就是问题所在,但我无法弄清楚):

    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 项目相对应的行。例如,如果我稍后想在 list 中添加另一个具有不同“名称”的项目,则它应该在 datagrid 中显示为具有不同“名称”的另一行。

【问题讨论】:

【参考方案1】:

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

【讨论】:

好的,因为我对 WPF 比较陌生,所以我不知道你的建议是什么。我想我会尝试研究如何收听 AutoGeneratingColumn。 我猜你有一个关于哪些列要添加到你的网格的逻辑不是吗?所以,让网格自动生成,当它生成时检查你的逻辑并决定是否添加..让我知道你是否需要澄清 搞定了。 This 帮助了。虽然这感觉有点奇怪,但它确实有效。感谢您的想法!

以上是关于将列动态添加到数据网格或使用列表中的特定列生成数据网格的主要内容,如果未能解决你的问题,请参考以下文章

pyspark将列添加到列表中已经不存在的数据框

如何将列添加到已经存在的超网格?

将列添加到数据框列表并进行增量添加/循环通过 df 进行简单添加

Pyspark 将列列表转换为聚合函数

MariaDB 将列动态添加到现有表

如何动态地将列添加到 DataFrame?