WPF DataGrid 动态列 总结

特殊情况下会遇到做一个带有动态列的DataGrid(比如前面几列固定 后面列数不固定),这里用一个第一列固定,column1往后不确定作为示例简单记录一下。

首先给一个字符串数组(也有可能是复杂的类集合,这里简单地以数组为例):

private static string[] dynamicColumns;

DataGrid将以这个数组的元素个数,自动生成列,并绑定数据。

再来给数组赋一下值:

dynamicColumns = new string[6] { "Column1", "Column2", "Column3", "Column4", "Column5", "Column6" };//假设6列

前端给一个DataGrid:

<DataGrid x:Name="grid" ItemsSource="{Binding}" AutoGenerateColumns="False"></DataGrid>

接下来用一个例子来模拟测试一下:

首先创建一个实体类,作为datagrid的每行数据类型:

    public class NewTestItem
    {
        private string idOrDescription;

        public string IdOrDescription
        {
            get { return idOrDescription; }
            set
            {
                idOrDescription = value;
            }
        }

        private string column1;

        public string Column1
        {
            get { return column1; }
            set { column1 = value; }
        }

        private string column2;

        public string Column2
        {
            get { return column2; }
            set { column2 = value; }
        }

        private string column3;

        public string Column3
        {
            get { return column3; }
            set { column3 = value; }
        }

        private string column4;

        public string Column4
        {
            get { return column4; }
            set { column4 = value; }
        }

        private string column5;

        public string Column5
        {
            get { return column5; }
            set { column5 = value; }
        }
    }

根据dynamicColumns数组生成这个datagrid:

private void GenerateGrid(object obj)
{
    object[] array = (object[])obj;
    grid = array[0] as DataGrid;

    var columnIdOrDescription = new DataGridTextColumn();
    columnIdOrDescription.Header = "Project";
    columnIdOrDescription.Binding = new Binding("IdOrDescription");
    columnIdOrDescription.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
    columnIdOrDescription.CellStyle = null;
    grid.Columns.Add(columnIdOrDescription);

    for (int i = 0; i < dynamicColumns.Length; i++)
    {
        var column = new DataGridTextColumn();
        column.Header = dynamicColumns[i];
        column.Binding = new Binding(dynamicColumns[i]);
        column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
        grid.Columns.Add(column);
    }

    grid.SetBinding(DataGrid.ItemsSourceProperty,"Items");
}

完整的代码地址

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值