将列动态添加到数据网格或使用列表中的特定列生成数据网格
Dynamically add a column to datagrid or generate datagrid with specific columns from a list
几天来我一直在与 datagrid
databinding
作斗争..
我正在尝试从 list
个自定义 object 动态生成 datagrid
。
因为我需要显示的 list-object 属性的数量可能会改变,所以我不知道确切的列数,也不知道它们的 headers.
所以我想,我将只动态添加我需要的列并为它们创建绑定(到特定的 object 属性)。之后,我将根据绑定使用 list
中的数据填充 datagrid
。
例如:
我创建一个空的datagrid
<DataGrid x:Name="MyDataGrid" AutoGenerateColumns="false" ItemsSource="{Binding}" Margin="0,0,0,31" Grid.RowSpan="2">
</DataGrid>
我创建了我的列表,用于存储我的数据和数据 object:
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
项对应的行。例如,如果我以后想用不同的 "Name" 向 list
添加另一个项目,它应该在 datagrid
中显示为另一行,也有不同的 "Name" .
我建议您将网格绑定到您的列表 属性,让 AutoGenerateColumns = True 并听取 AutoGeneratingColumn 在那里您决定是否要将该列添加到网格。
几天来我一直在与 datagrid
databinding
作斗争..
我正在尝试从 list
个自定义 object 动态生成 datagrid
。
因为我需要显示的 list-object 属性的数量可能会改变,所以我不知道确切的列数,也不知道它们的 headers.
所以我想,我将只动态添加我需要的列并为它们创建绑定(到特定的 object 属性)。之后,我将根据绑定使用 list
中的数据填充 datagrid
。
例如:
我创建一个空的datagrid
<DataGrid x:Name="MyDataGrid" AutoGenerateColumns="false" ItemsSource="{Binding}" Margin="0,0,0,31" Grid.RowSpan="2">
</DataGrid>
我创建了我的列表,用于存储我的数据和数据 object:
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
项对应的行。例如,如果我以后想用不同的 "Name" 向 list
添加另一个项目,它应该在 datagrid
中显示为另一行,也有不同的 "Name" .
我建议您将网格绑定到您的列表 属性,让 AutoGenerateColumns = True 并听取 AutoGeneratingColumn 在那里您决定是否要将该列添加到网格。