datagrid显示的方式是绑定指定数据集合来实现显示的,理论上也可以具体去一行一行、一格一格的去指定datagrid中该显示什么,但是这样巨难用,而且后面想修改指定行、指定格的内容特别难,我百度了N久,网上的方法都不对,所以建议使用绑定数据集合的方式来设置显示的数据,如果你的数据是临时构建的,那你可以定义一个临时集合去装临时数据,然后把临时集合绑定在datagrid上,dataGrid绑定一个400-500行的数据并显示速度极快,根本感觉不到延迟卡顿。
这样就可以显示一个两列的表
声明一个类
class Test{
public String startTime {set; get; }
public String changeTime { set; get; }
}
定义装这个类的集合
List testList=new List ();
将这个集合填充完数据后,绑定数据
gridTotal.ItemsSource = testList;
这个时候在表格中就显示绑定的数据啦
假设你需要修改某行某列的数据,先修改testList
中的具体数据,然后
gridTotal.ItemsSource = null;
gridTotal.ItemsSource = testList;
这样即可
(有bug,请参照2-8的解决方案)
这是从网上找的方法,在数据量一多之后,就会出现多找乱找行的现象,求大神解惑
///
/// 改变一个dataGrid单元个的值
///
///
///
private void changeGridTableCellValue(DataGrid dg,int rowNum,int columnNum,String value)
{
if (!Window.GetWindow(dg).IsVisible)
{
Window.GetWindow(dg).Show();
}
dg.UpdateLayout();
TextBlock changeCell = dg.Columns[columnNum].GetCellContent(dg.Items[rowNum]) as TextBlock;
if (changeCell == null)
{
Console.WriteLine("bug");
return;
}
changeCell.Text = value;
}
private void changeGridTableCellColor(DataGrid dg, int rowNum, int columnNum, Color color)
{
if (!Window.GetWindow(dg).IsVisible)
{
Window.GetWindow(dg).Show();
}
dg.UpdateLayout();
DataGridRow row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(rowNum);
if (row == null)
{
Console.WriteLine("bug");
return;
}
DataGridCellsPresenter presenter = GetVisualChild(row);
DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnNum);
cell.Background = new SolidColorBrush(color);
}
在xaml中在
标签中加入
引入样式文件
关键: Width=”*”
*在这里表示一个标准量
前面加上数字以表示当前列宽度在整个宽度中的权重。
如上设置
2*,2*,,
则总权为2+2+1+1=6
则2/6即列的百分比宽度了。
如果不加 * 则表明这是指定像素值
关键在于
标签中添加属性AlternationCount="2"
然后在
dataGrid自带有选中行变成蓝底白字的功能,所以要实现选中行变成其他色,覆盖原来的显示样式,原来的显示样式是基于cellStyle的所以应当在
添加
在
设置
其中GridLinesVisibility
属性 就是设置单元格线的显示方式,当前设置的是只显示横线
在前面将DataGrid的理念是表只是将数据的呈现,应当改根据数据的内容来决定显示的样式,而不是直接修改某行的颜色。
所以要想修改行颜色,是要让表格去判断XX行是否满足XX条件,满足就变色,不满足就不变色。
这里说明修改满足指定条件的行背景颜色的方法
定义一个style
其中 arg
是被表格显示的类中的一个属性,当这个属性的值为 true
时,这一行的背景颜色是就是红色
单元格RowCell本身没有Background属性,无法设置颜色,需要在单元格里面嵌套一层有背景颜色属性控件来显示颜色,这里我用StackPanel
表头应当这样配置
此时StackPanel
的样式由名为 normalColumn
的style控制
这时,单元格的背景颜色就变成了白色,如果想指定单元格变成指定颜色,请参照2.8 修改满足指定条件的行背景颜色 的设置方法
参考:
https://blog.csdn.net/zhengxiaotaozz/article/details/72674370
https://blog.csdn.net/u012094627/article/details/30046725
https://blog.csdn.net/www89574622/article/details/76187254
https://www.jb51.net/article/55084.htm
https://www.cnblogs.com/start-from-scratch/p/5716524.html
https://blog.csdn.net/liuyundemhsg/article/details/79637606