WPF DataGrid动态加载列名 并绑定对应数据

挑水的秃头 2018-12-11 06:23:26
当前已经有一个DataGrid,并且绑定了ItemSource进行数据显示。现在需要根据数据库一张表中的数据字段(例如Students表中的Name字段)在这个DataGrid中动态添加列。并实现前端根据Students表实时进行更新。
代码:
<DataGrid ItemsSource="{Binding Schools,UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedBeam}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{ Binding Path=Number}" IsReadOnly="True">
<DataGridTextColumn.Header>
<TextBlock Text="Number" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid >

当前DataGrid中已有一列表头为Number的的数据,想根据另一个数据源Students中的Name值自动生成对应列(例如表中有Name为Tom和Jimmy,表中会新增Tom、Jimmy为表头的两列)并且数据可以实时根据数据库进行刷新

各位大佬,请赐教!
...全文
2021 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cheng2005 2018-12-26
  • 打赏
  • 举报
回复 1
不同的数据源对应不同UI模板,比如数据源A对应UI模板A,数据源B对应UI模板B,这才正道,而不是搞什么动态加载列名。
exception92 2018-12-26
  • 打赏
  • 举报
回复
引用 12 楼 小白的编程路 的回复:
[quote=引用 11 楼 exception1992 的回复:]
首先DataGrid的ItemsSource只能有一个。动态添加列类似:

DataGridTextColumn column1 = new DataGridTextColumn();
column1.Header="xxx";
column1.Binding = new Binding("Class.Name");
dataGrid.Columns.Add(column1);

即使是显示出了Name的值,数据也不会动态更新,因为是不同的数据源,除非name也在Schools中定义。类似 Binding Path=Number绑定方式,会从当前行去找数据对象,而数据对象是由数据集提供的,不同的数据集是不会更新数据的。
更新我有办法,关键就是没办法绑定第二个数据源并且按照要求展示出来[/quote]
ItemsSource 只能有一个数据源
平底锅锅锅 2018-12-26
  • 打赏
  • 举报
回复
挑水的秃头 2018-12-26
  • 打赏
  • 举报
回复
引用 11 楼 exception1992 的回复:
首先DataGrid的ItemsSource只能有一个。动态添加列类似:

DataGridTextColumn column1 = new DataGridTextColumn();
column1.Header="xxx";
column1.Binding = new Binding("Class.Name");
dataGrid.Columns.Add(column1);
即使是显示出了Name的值,数据也不会动态更新,因为是不同的数据源,除非name也在Schools中定义。类似 Binding Path=Number绑定方式,会从当前行去找数据对象,而数据对象是由数据集提供的,不同的数据集是不会更新数据的。
更新我有办法,关键就是没办法绑定第二个数据源并且按照要求展示出来
exception92 2018-12-26
  • 打赏
  • 举报
回复
引用 17 楼 小白的编程路 的回复:
[quote=引用 14 楼 exception1992 的回复:]
[quote=引用 12 楼 小白的编程路 的回复:]
[quote=引用 11 楼 exception1992 的回复:]
首先DataGrid的ItemsSource只能有一个。动态添加列类似:

DataGridTextColumn column1 = new DataGridTextColumn();
column1.Header="xxx";
column1.Binding = new Binding("Class.Name");
dataGrid.Columns.Add(column1);

即使是显示出了Name的值,数据也不会动态更新,因为是不同的数据源,除非name也在Schools中定义。类似 Binding Path=Number绑定方式,会从当前行去找数据对象,而数据对象是由数据集提供的,不同的数据集是不会更新数据的。
更新我有办法,关键就是没办法绑定第二个数据源并且按照要求展示出来[/quote]
ItemsSource 只能有一个数据源[/quote]是的,我的思路可能不对,各位大佬如果有别的方法思路,还请指点一下[/quote]
除非name也在Schools中定义
挑水的秃头 2018-12-26
  • 打赏
  • 举报
回复
引用 15 楼 cheng2005 的回复:
不同的数据源对应不同UI模板,比如数据源A对应UI模板A,数据源B对应UI模板B,这才正道,而不是搞什么动态加载列名。
表面看着类似一个DataGrid,Snoop看了是自己写的自定义控件,具体实现细节没法领悟到。
挑水的秃头 2018-12-26
  • 打赏
  • 举报
回复
引用 14 楼 exception1992 的回复:
[quote=引用 12 楼 小白的编程路 的回复:] [quote=引用 11 楼 exception1992 的回复:] 首先DataGrid的ItemsSource只能有一个。动态添加列类似:

DataGridTextColumn column1 = new DataGridTextColumn();
column1.Header="xxx";
column1.Binding = new Binding("Class.Name");
dataGrid.Columns.Add(column1);
即使是显示出了Name的值,数据也不会动态更新,因为是不同的数据源,除非name也在Schools中定义。类似 Binding Path=Number绑定方式,会从当前行去找数据对象,而数据对象是由数据集提供的,不同的数据集是不会更新数据的。
更新我有办法,关键就是没办法绑定第二个数据源并且按照要求展示出来[/quote] ItemsSource 只能有一个数据源[/quote]是的,我的思路可能不对,各位大佬如果有别的方法思路,还请指点一下
挑水的秃头 2018-12-26
  • 打赏
  • 举报
回复
引用 13 楼 C_gyl 的回复:
https://blog.csdn.net/C_gyl/article/details/85095021 看下是不是你想要的
这个是列里添加控件,和我动态展示列名不太像
exception92 2018-12-19
  • 打赏
  • 举报
回复
首先DataGrid的ItemsSource只能有一个。动态添加列类似:

DataGridTextColumn column1 = new DataGridTextColumn();
column1.Header="xxx";
column1.Binding = new Binding("Class.Name");
dataGrid.Columns.Add(column1);

即使是显示出了Name的值,数据也不会动态更新,因为是不同的数据源,除非name也在Schools中定义。类似 Binding Path=Number绑定方式,会从当前行去找数据对象,而数据对象是由数据集提供的,不同的数据集是不会更新数据的。
挑水的秃头 2018-12-19
  • 打赏
  • 举报
回复
自己再顶一下 等大佬赐教
挑水的秃头 2018-12-17
  • 打赏
  • 举报
回复
引用 4 楼 独立观察员 的回复:
另一数据源?应该不行吧?
可以是可以 我看到别的软件有这个效果 就是不知道前端怎么写
挑水的秃头 2018-12-17
  • 打赏
  • 举报
回复
引用 8 楼 晨易夕 的回复:
那你就把DataGridTextColumn建立的足够的多,然后在ViewMode里实现你的List,列的Visibility也Binding起来,存在的就显示了,不存在的也隐藏了。
我需要自动增长的列所绑定的数据源不是固定的,是用户增删改操作决定的,所以这种方法不太适合。
晨易夕 2018-12-17
  • 打赏
  • 举报
回复
那你就把DataGridTextColumn建立的足够的多,然后在ViewMode里实现你的List,列的Visibility也Binding起来,存在的就显示了,不存在的也隐藏了。
挑水的秃头 2018-12-17
  • 打赏
  • 举报
回复
引用 6 楼 晨易夕 的回复:
界面就不新增列,允许自动生成列不行吗
不太明白你说的意思,当前的DataGrid是用<DataGridTextColumn>标签写的固定列,AutoGenerateColumns的属性我也试了但不是我要的效果。我希望在当前写好的固定列后面可以根据绑定的另一个数据源中的数据的增删改,实现列的变化。
晨易夕 2018-12-17
  • 打赏
  • 举报
回复
界面就不新增列,允许自动生成列不行吗
独立观察员 2018-12-15
  • 打赏
  • 举报
回复
另一数据源?应该不行吧?
挑水的秃头 2018-12-13
  • 打赏
  • 举报
回复
大佬们 出来指教
挑水的秃头 2018-12-12
  • 打赏
  • 举报
回复
大佬在哪里啊
挑水的秃头 2018-12-11
  • 打赏
  • 举报
回复
网上的方法基本都试了,问题困扰很多天了。有知道的大佬烦请贴出代码供我等菜鸟学习,我用的是MVVM模式

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧