c# WPF DataGrid的使用

1.设置显示内容

datagrid显示的方式是绑定指定数据集合来实现显示的,理论上也可以具体去一行一行、一格一格的去指定datagrid中该显示什么,但是这样巨难用,而且后面想修改指定行、指定格的内容特别难,我百度了N久,网上的方法都不对,所以建议使用绑定数据集合的方式来设置显示的数据,如果你的数据是临时构建的,那你可以定义一个临时集合去装临时数据,然后把临时集合绑定在datagrid上,dataGrid绑定一个400-500行的数据并显示速度极快,根本感觉不到延迟卡顿。

1.数据显示

1.定义xaml文件

                            
                                    
            
            
        
    

这样就可以显示一个两列的表

2.绑定数据

声明一个类

class Test{
    public String startTime {set; get; }
    public String changeTime { set; get; }
}

定义装这个类的集合

List testList=new List ();

将这个集合填充完数据后,绑定数据

gridTotal.ItemsSource = testList;

这个时候在表格中就显示绑定的数据啦

3.修改数据

假设你需要修改某行某列的数据,先修改testList中的具体数据,然后

gridTotal.ItemsSource = null;
gridTotal.ItemsSource = testList;

这样即可

4.修改某行某列的值和颜色(有BUG)

(有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);
}   

2.外观显示

1.让DataGrid中的列标题居中

在xaml中在标签中加入


    

2.让内容单元格居中显示

引入样式文件

3.按百分比显示设置列的宽度


    
    
    
    

关键: Width=”*”
*在这里表示一个标准量
前面加上数字以表示当前列宽度在整个宽度中的权重。
如上设置
2*,2*,
则总权为2+2+1+1=6
则2/6即列的百分比宽度了。
如果不加 * 则表明这是指定像素值

4.隔行变色

                       
    
        
           

关键在于 标签中添加属性AlternationCount="2"
然后在

5.鼠标滑过行变色

                       
    
        
           

6.选中行变色

dataGrid自带有选中行变成蓝底白字的功能,所以要实现选中行变成其他色,覆盖原来的显示样式,原来的显示样式是基于cellStyle的所以应当在添加

  
      
  

7.取消单元格的边框

设置


其中GridLinesVisibility属性 就是设置单元格线的显示方式,当前设置的是只显示横线

8.修改满足指定条件的行背景颜色

在前面将DataGrid的理念是表只是将数据的呈现,应当改根据数据的内容来决定显示的样式,而不是直接修改某行的颜色。

所以要想修改行颜色,是要让表格去判断XX行是否满足XX条件,满足就变色,不满足就不变色。

这里说明修改满足指定条件的行背景颜色的方法
定义一个style


其中 arg是被表格显示的类中的一个属性,当这个属性的值为 true时,这一行的背景颜色是就是红色

9,修改单元格的颜色

单元格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

你可能感兴趣的:(c#,WPF)