当前已经有一个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为表头的两列)并且数据可以实时根据数据库进行刷新。各位大佬,请赐教!
                

解决方案 »

  1.   

    网上的方法基本都试了,问题困扰很多天了。有知道的大佬烦请贴出代码供我等菜鸟学习,我用的是MVVM模式
      

  2.   

    不太明白你说的意思,当前的DataGrid是用<DataGridTextColumn>标签写的固定列,AutoGenerateColumns的属性我也试了但不是我要的效果。我希望在当前写好的固定列后面可以根据绑定的另一个数据源中的数据的增删改,实现列的变化。
      

  3.   

    那你就把DataGridTextColumn建立的足够的多,然后在ViewMode里实现你的List,列的Visibility也Binding起来,存在的就显示了,不存在的也隐藏了。
      

  4.   

    首先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绑定方式,会从当前行去找数据对象,而数据对象是由数据集提供的,不同的数据集是不会更新数据的。
      

  5.   

    https://blog.csdn.net/C_gyl/article/details/85095021
    看下是不是你想要的
      

  6.   

    ItemsSource 只能有一个数据源
      

  7.   

    不同的数据源对应不同UI模板,比如数据源A对应UI模板A,数据源B对应UI模板B,这才正道,而不是搞什么动态加载列名。
      

  8.   

    ItemsSource 只能有一个数据源是的,我的思路可能不对,各位大佬如果有别的方法思路,还请指点一下
      

  9.   

    表面看着类似一个DataGrid,Snoop看了是自己写的自定义控件,具体实现细节没法领悟到。
      

  10.   

    ItemsSource 只能有一个数据源是的,我的思路可能不对,各位大佬如果有别的方法思路,还请指点一下
    除非name也在Schools中定义