c# - 如何将值添加到在运行时定义的列(WPF Datagrid)
问题描述
我的 XAML(包含两个静态列)
<DataGrid x:Name="grid" Grid.Row="1" AutoGenerateColumns="False" ItemsSource="
{Binding }">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
</DataGrid.Columns>
</DataGrid>
Datagrid 集合的代码隐藏。
ObservableCollection<Users> list = new ObservableCollection<Users>();
class Users
{
public int Id { get; set; }
public string Name { get; set; }
}
在运行时从 Code Behind 添加列
private void AddColumnsAtRuntime()
{
grid.Columns.Add(new DataGridTextColumn()
{
Header = "Address",
Binding = new Binding("Address")
});
}
填充集合
private void AddRow()
{
list.Add(new Users()
{
Id = 1,
Name = "John"
});
}
我想要的是-如何向静态和动态列添加值,静态列将包含一些样式触发器
解决方案
ObservableCollection<Users>
您可以绑定到可以动态添加列DataView
的 a ,而不是绑定到 a :DataTable
DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("Id"));
dataTable.Columns.Add(new DataColumn("Name"));
list = dataTable.DefaultView;
...
list.Table.Rows.Add(1, "John");
...
list.Table.Columns.Add(new DataColumn("Address"));
list.Table.Rows[dataTable.Rows.Count - 1]["Address"] = "address...";
XAML 与之前完全相同:
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
</DataGrid.Columns>
推荐阅读
- wamp - 访问本地域名网站作为 WAMP 中的 API 服务器
- azure - SSL“裸”(无 www)自定义域的 Azure 前门和 DNS 配置
- google-chrome-extension - Chrome 扩展:未选中 runtime.lastError:无法建立连接。接收端不存在
- laravel - 如何在 vue 内联模板中使用嵌套组件变量?
- split - 在 Erlang 中提取二进制文件的前 N 个元素
- android - Android Room Composit 主键问题
- r - 从 scale_fill_gradientn 颜色栏中删除刻度
- r - 从 Ryacas 计算表达式中提取 x^k 的系数
- python - perl 正则表达式之间的区别在摩西的两个数字之间添加点
- selenoid - selenoid 有像 zalenium 这样的仪表板吗?哪个更推荐使用?