自己记录一下怕自己以后都忘记了。
言归正传,所谓动态加载DataGrid就是说表头和数据都是动态生成出来的,不是预先设置好的值。
在网上也找了很久这方面的资料,然后功夫不负有心人还是找到了,然后写一下自己在做的过程中的一些方法和心得。
先说明我没有用WPF的MVVM模式做。
首先需要先在页面上放一个空的DataGrid
<DataGrid x:Name="DataGrids" >
<DataGrid.Columns>
</DataGrid.Columns>
</DataGrid>
先创建需要动态生成的数据,根据使用的场景不用生成的数据也不一样
string head = "1,2,3,4,5,6";
string data = "6.5.4.3.2.1";
分割为数组
string[] headStr = head.Split(',');
string[] dataStr = data.Split(',');
创建一个DataTable用来存放数据
DataTable dt = new DataTable();
循环headStr先设置GataGrid的头
DataGridTextColumn textBoxColumn = new DataGridTextColumn();
foreach (var item in headStr)
{
textBoxColumn = new DataGridTextColumn();
textBoxColumn.Header = item;
textBoxColumn.Width = 100;
textBoxColumn.Binding = new Binding(item);
DataGrids.Columns.Add(textBoxColumn);//将列添加到集合中
dt.Columns.Add(new DataColumn(item));//将头名称保存到DataTable中
}
运行结果如下:
头设置好了接下来需要动态来添加数据
创建一个DataRow保存需要添加的数据
DataRow dr = dt.NewRow();
循环头以此往DataRow里面添加数据,这个地方为什么要循环头呢?数据都想对应的,头的数据长度是多少,数据的长度就会是多少。
for (int i = 0; i < headStr.Length ; i++)
{
头里面的数据以此键值对的添加进去
dr[i] = dataStr[i];
}
循环完成以后添加到DataTable里面去
dt.Rows.Add(dr);
最后页面绑定数据
DataGrids.ItemsSource = null;
DataGrids.ItemsSource = dt.DefaultView;
运行结果如下:
完整后端代码:
string head = "1,2,3,4,5,6";
string data = "6,5,4,3,2,1";
string[] headStr = head.Split(',');
string[] dataStr = data.Split(',');
DataGridTextColumn textBoxColumn = new DataGridTextColumn();
foreach (var item in headStr)
{
textBoxColumn = new DataGridTextColumn();
textBoxColumn.Header = item;
textBoxColumn.Width = 100;
textBoxColumn.Binding = new Binding(item);
DataGrids.Columns.Add(textBoxColumn);//将列添加到集合中
dt.Columns.Add(new DataColumn(item));
}
DataRow dr = dt.NewRow();
for (int i = 0; i < headStr.Length; i++)
{
dr[i] = dataStr[i];
}
dt.Rows.Add(dr);
DataGrids.ItemsSource = null;
DataGrids.ItemsSource = dt.DefaultView;
这个是我借鉴别人写好的做出来的,如有雷同,纯属巧合。哈哈哈哈