繁体   English   中英

在WPF中访问dataGrid中的特定行/列

[英]Accessing a particular row/column in a dataGrid in WPF

最近,我才刚刚开始学习WPF。 尽管我大部分的开发经验都来自Win Forms,但我已经相当顺利地过渡到WPF。

                                OVERVIEW

我正在编写一个程序,用于比较两个单独的dataTables中的信息,并反映出dataGrid中所做的更改。

dataTables代表“旧信息”和“新信息”的列表。 比较dataTables之后,我希望根据“新信息表”中是否进行了更改来突出显示特定的单元格。

例如,如果dataGrid([0] [0])中的第一个单元格包含“旧信息”数据表中的“ 3”,而“ New Information”数据表中的相同单元格([0] [0])包含“ 5”。 我希望将背景颜色更改为黄色,以反映此更改。

                                 PROBLEM

我目前正在处理两个dataGrid对象,这些对象正在填充中,并表示两个dataTables(“旧信息”和“新信息”)。 我遇到的问题是我似乎无法很好地访问特定的行或列。 我希望能够访问特定的行/单元格,以便可以通过代码更改背景色。

                                 Comments

我记得当我使用Win Forms时,可以按照dataGrid1.Rows [rowNumber] .Columns [ColumnNumber]的方式执行某些操作,以访问特定的行/列。

到目前为止,我从WPF的DataGrid中了解的更多内容是基于对象的或类似的东西,这使得访问特定行/列的过程略有不同/繁琐。 如果您碰巧知道如何在WPF中访问dataGrid中的行/单元格内容,请告诉我。 任何简单的例子将不胜感激。

您是对的,DataGrid非常适合数据绑定,并且可能很难以编程方式访问和操纵其中的行,列和单元格。 使用WPF时,最好采用MVVM路由。 在您的情况下,您可以使用基础数据来驱动单元格颜色,而不必尝试编写代码隐藏代码来实现此目的。

MVVM是一个很大的主题,但是作为可能涉及的内容的一种,您通常会创建一个“模型”类来表示要显示在网格行中的实体。 您的视图模型将公开这些对象的集合,这些对象绑定到网格并呈现为单独的行(通常,您将在XAML中手动定义列,将它们绑定到模型类的单独属性)。

在不知道您的特定网格显示什么的情况下很难提供示例。 但是,假设您要列出客户详细信息-第一列可能是名称,第二列可能是地址,依此类推。 一种解决方案可能是在模型类上包括其他布尔属性,以指示特定属性值是否与其“旧”对应值不同。 数据触发器可以使用这些属性来更改单元格背景色,而数据触发器位于应用于数据网格列的CellStyles中。

快速而肮脏的代码示例浮出水面,因此可能不是100%正确的:

public class Customer
{
    public string CustomerName {get; set;}
    public string CustomerAddress {get; set;}
    public bool CustomerNameDiffers {get; set;}
    public bool CustomerAddressDiffers {get; set;}
}

public class MyViewModel
{
    public ObservableCollection<Customer> Customers {get; set;}

    //etc..
}

XAML:

<Window.Resources>
   <Style x:Key="CustomerNameCellStyle"
          TargetType="DataGridTextColumn">
       <Style.Triggers>
           <DataTrigger Binding="{Binding CustomerNameDiffers}"
                        Value="True">
               <Setter Property="Background" 
                       Value="Yellow" />
           </DataTrigger>
       </Style.Triggers>
   </Style>
</Window.Resources>

<DataGridTextColumn Binding="{Binding CustomerName}" 
                    CellStyle="{StaticResource CustomerNameCellStyle}"
                    ... />

我意识到这是一个笼统的答案,但是MVVM是一个大话题,但是如果您要充分利用WPF并摆脱Winforms的代码隐藏习惯,则很值得获得理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM