wpf中datagrid自动生成列,并进行字段绑定

在工作中遇见的,需要动态生成列,所以,这里随便写一个很简单的,欢迎补充,如有引用或转载,请标注说明,谢谢!!!

今天遇见一个情况,同一个功能,因为登录人员不同,显示不同的内容,为了保证扩展性,就想到了datagrid列自动生成这种情况,通过调用后台接口控制自动生成列的属性,代码比较简单,只是为了记录基础的信息,在这里写下来,欢迎同行指正

1.代码

1.1前端xaml代码

   
        
            
                
                
                
                
            
            
                
            
            
                
                    
                        
                    
                
            
        
    

2.2对应的xaml.cs代码

using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace AutoAddColumns
{
    /// 
    /// MainWindow.xaml 的交互逻辑
    /// 
    public partial class MainWindow : Window
    {
        private int initColumnNum;
        private string bindingColumn;
        public ObservableCollection Model;
        public MainWindow()
        {
            InitializeComponent();
        }

        private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            initColumnNum = SourceDg.Columns.Count;
        }

        private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
        {
            Model = new ObservableCollection();
            SourceDg.ItemsSource = null;
            //删除上次添加的列
            if (SourceDg.Columns.Count > initColumnNum)
            {
                var count = SourceDg.Columns.Count;
                for (int i = initColumnNum; i < count; i++)
                {
                    SourceDg.Columns.RemoveAt(SourceDg.Columns.Count - 1);
                }
            }
            var text = ColumnsTB.Text;
            if (string.IsNullOrEmpty(text))
            {
                //MessageBox.Show("添加列名称不能为空");
                return;
            }
            var arrayList = text.Split(',').ToArray();
            //循环遍历添加列值
            foreach (var column in arrayList)
            {
                //初始化需要绑定列的值
                bindingColumn = column;
                var dtc = new DataGridTextColumn
                {
                    Binding = new Binding(bindingColumn),
                    ElementStyle = Resources["contentCenterStyle"] as Style,
                    //ElementStyle=new Binding( DynamicResource contentLeftStyle)
                    Width = 90,
                    IsReadOnly = true,
                    Header = column,
                };
                SourceDg.Columns.Add(dtc);
            }

            Model = new ObservableCollection()
            {
                new Model() {name = "张三", age = "18", sex = "男", adress = "南充"},
                new Model() {name = "李四", age = "21", sex = "男", adress = "成都", grade = 97},
                new Model() {name = "雪雪", age = "19", sex = "女"},
            };
            SourceDg.ItemsSource = Model;
        }
    }


    public class Model
    {
        public string name { get; set; }

        public string age { get; set; }

        public string sex { get; set; }

        public decimal? grade { get; set; }

        public string adress { get; set; }
    }
}

2.生成效果图

输入的列名称用逗号隔开,分别绘制
wpf中datagrid自动生成列,并进行字段绑定_第1张图片

3.注意事项

我这里的代码,在每一次点击添加按钮时,都会去清空上次添加的列,保证不会重复添加

界面datagrid的AutoGenerateColumns属性,这个设置成false。在datagrid的ItemsSource属性的说明中很明确的写到:wpf中datagrid自动生成列,并进行字段绑定_第2张图片
wpf中datagrid自动生成列,并进行字段绑定_第3张图片
datagrid.AutoGenerateColumns默认为true,如果没有在datagrid界面中重新设定,在你原来添加的列上,datagrid将自动添加temsSource绑定实体的所有属性列。大概效果图如下:
wpf中datagrid自动生成列,并进行字段绑定_第4张图片
上面的结果图可以看出来,datagrid除了将我们输入的列名称绘制出来了,还将Model实体的所有属性均绘制了列。
所以,根据不同的情况设置AutoGenerateColumns属性,当然,我这里是不需要的。

你可能感兴趣的:(笔记)