`

WPF中DataGrid的使用 .

 
阅读更多

 DataGrid是WPF中的数据显示控件,相当于Winform中的DataGridView。但是两者之间的用法确存在一些差异。在文档中,如果利用两者的不同之处可以更加清楚的描述好DataGrid的使用,我将采用该种方法。好了我们首先看一下如何为DataGrid指定数据源吧!

   我们知道在Winform中DataGridView的数据源可以是DataTable,DataView,List<T>等,但是在WPF中DataGrid的数据源不能直接为DataTable。作为DataGrid的数据源的对象必须实现了IEnumerable接口的,至于你们是否怀疑DataGrid的数据源真的不能直接指定为DataTable?那最好是自己去尝试一下。因为求知就得如此。我是试过了哈!如果你真的要将DataTable指定给DataGrid。那么你可以采用以下方法:this.dataGrid.ItemSource = dt.DefaultView;这里的dt是你创建的DataTable对象。你注意到了吗?先前我们使用的诸如DataGridView,ComboBox,Web中的GridView等数据显示控件在指定数据源时都是为其属性DataSource指定数据源对象。但是WPF中的DataGrid却不是这样,我开始接触的时候按照自己的思维方式去找寻DataSource属性,可未成功!查阅资料才知道是ItemSource属性。所以请注意了!

  我们在使用DataGrid控件时,可以直接将数据源对象指定给DataGrid的ItemSource属性。此时数据显示将按照数据源的数据结构进行数据显示。如果你需要根据你自己定义的方式显示数据,此时需要借助于代码定义样式了!DataGrid的整体外观我们可以通过设置DataGrid的属性来体现,也可以通过Style来体现。如利用DataGrid的HeadersVisibility设置头或列是否显示,该属性有三个值,分别的含义是:None 表示列头和行头都不显示; All 表示列头和行头都显示; Row表示行头显示; Column 表示列头显示;利用DataGrid的RowBackgroud属性设置行的背景色等等。我们也可以利用设置DataGrid的Style来控制DataGrid的外观样式。如利用DataGrid.ColumnHeaderStyle来设置DataGrid的列头显示样式,示例代码如下:

<DataGrid.ColumnHeaderStyle>
                <Style TargetType="DataGridColumnHeader">
                    <Setter Property="Background">
                        <Setter.Value>
                            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                <GradientStop Color="White" Offset="0"/>
                                <GradientStop Color="Yellow" Offset="0.5"/>
                                <GradientStop Color="White" Offset="1"/>
                            </LinearGradientBrush>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="Foreground" Value="Black"/>
                    <Setter Property="FontSize" Value="13" />
                </Style>
            </DataGrid.ColumnHeaderStyle>

 

以上代码分别对DataGrid的列头的背景色、前景色和字体做了设置。其中在设置背景色时,利用了(LinearGradientBrush)使其背景色呈渐变效果。

利用DataGrid.RowHeaderStyle来设置DataGrid的行头显示样式,示例代码如下:

<DataGrid.RowHeaderStyle>
                <Style TargetType="DataGridRowHeader">
                    <Setter Property="Content" Value=" •¤"/>
                    <Setter Property="Width" Value="10"/>
                    <Setter Property="Background">
                        <Setter.Value>
                            <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                                <GradientStop Color="White" Offset="0"/>
                                <GradientStop Color="SkyBlue" Offset="1"/>
                            </LinearGradientBrush>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="ToolTip" Value="选中该行"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.RowHeaderStyle>

 

看着这些代码,与刚刚的ColumnHeaderStyle的代码大同小异,在此我想说的是其中的Style.Trigger节点,该节点顾名思义可以理解为触发器。在以上代码中表示当鼠标移动到行头上方时,将提示"选中该行"

在对于列头的样式定义中,以上方法是对所有列进行的全局定义。如果你需要将特殊位置的列显示为特殊样式,那么你可以对该列进行单独的样式定义,方法如下:

  <DataGridTextColumn Header="编号" Binding="{Binding Path=ID}">
                    <DataGridColumn.HeaderStyle>
                        <Style TargetType="DataGridColumnHeader">
                            <Setter Property="Background">
                                <Setter.Value>
                                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                        <GradientStop Color="White" Offset="0"/>
                                        <GradientStop Color="SkyBlue" Offset="0.5"/>
                                        <GradientStop Color="White" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                            <Setter Property="Foreground" Value="Black"/>
                            <Setter Property="FontSize" Value="13"/>
                            <Setter Property="Width" Value="100"/>
                            <Style.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="ToolTip" Value="按照该列进行排序"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </DataGridColumn.HeaderStyle>
                </DataGridTextColumn>

 

在该段代码中,DataGridTextColumn代表该列以文本的形式显示,同时显示的数据为您所指定数据源的ID这个字段的数据。在这里我们提到了DataGridTextColumn使其内容按照文本的形式显示,在WPF中提供了四种基本的列显示样式:

              DataGridTextColumn                     文本显示内容,指定的数据类型为String

              DataGridCheckBoxColumn          复选框的形式显示内容,指定的数据类型为Boolean

              DataGridComboBoxColumn       下拉列表的形式显示内容,指定的数据类型为Enum

              DataGridHyperlinkColumn           超链接的形式显示内容,指定的数据类型为Uri

往往我们在实际的开发中,以上四种样式并不能完全满足我们的需求,此时我们可以利用DataGridTemplateColumn来自定义显示样式,示例如下:

在使用DataGridTemplateColumn时,我们必须先定义DataTemplate:

<Window.Resource>

    <DataTemplate x:Key="BirthTemplate">
            <StackPanel Width="200" Height="20">
                <Border Background="Orange" BorderBrush="Black" BorderThickness="1">
                    <TextBlock Text="{Binding Birthday, StringFormat={}{0:MM-dd}}" 
                       FontSize="13" HorizontalAlignment="Center"/>
                </Border>
                <Border Background="White" BorderBrush="Black" BorderThickness="1">
                    <TextBlock Text="{Binding Birthday, StringFormat={}{0:yyyy}}" 
                       FontSize="13" HorizontalAlignment="Center"/>
                </Border>
            </StackPanel>
        </DataTemplate>
        <DataTemplate x:Key="EditingDateTemplate">
            <DatePicker SelectedDate="{Binding Birthday}"/>
        </DataTemplate>

</Window.Resource>

 

使用以上样式:

 <DataGridTemplateColumn Header="出生日期" Width="100"
                        CellTemplate="{StaticResource BirthTemplate}"
                        CellEditingTemplate="{StaticResource EditingDateTemplate}"/>

 

分享到:
评论

相关推荐

    WPF.DataGrid.MergeRow

    标题"WPF.DataGrid.MergeRow"和描述中的"实现功能:WPF下DataGrid实现行单元格合并"正是针对这个需求的解决方案。 DataGrid的行单元格合并功能并不是默认支持的,因此通常需要通过自定义样式、模板和数据绑定来实现...

    WPF之DataGrid应用.docx

    &lt;DataGrid.Columns&gt; 公司名称" Binding="{Binding CompanyName}" /&gt; &lt;!-- 其他列定义 --&gt; &lt;/DataGrid.Columns&gt; &lt;/DataGrid&gt; ``` 这里可以添加多种类型的列,如`DataGridTextColumn`、`DataGridCheckBoxColumn`...

    WPF中DataGrid主从数据(父子数据)展示

    &lt;DataGrid.RowDetailsTemplate&gt; &lt;DataGrid ItemsSource="{Binding}"&gt; &lt;DataGrid.Columns&gt; 产品名" Binding="{Binding ProductName}" /&gt; 数量" Binding="{Binding Quantity}" /&gt; &lt;/DataGrid.Columns&gt; &lt;/...

    WPF Extended.Wpf.Toolkit 加载界面 Demo

    1. **WPF Extended.Wpf.Toolkit库的使用** WPF Extended.Wpf.Toolkit库提供了许多额外的控件,如:数字输入框、日历控件、颜色选择器、进度条等,但最引人注意的是它的加载指示器组件。这个库可以通过NuGet包管理器...

    wpf中DataGrid数据双向绑定

    &lt;DataGrid.Columns&gt; , UpdateSourceTrigger=PropertyChanged}" /&gt; , UpdateSourceTrigger=PropertyChanged}" /&gt; &lt;/DataGrid.Columns&gt; &lt;/DataGrid&gt; ``` 4. **使用INotifyPropertyChanged**:为了实现双向绑定,...

    WPFdatagrid行高测试.zip

    在标签中,提到了"C# wpf grid",这暗示了项目使用C#编程语言,这是.NET Framework的主要开发语言,并且与WPF框架紧密集成。此外,"grid"指的是我们讨论的DataGrid控件。 压缩包内的文件名列表如下: 1. MainWindow...

    wpf datagrid实现树结构.rar

    在WPF(Windows Presentation Foundation)开发中,DataGrid控件是一种常用的数据展示工具,它可以用于显示和编辑表格数据。然而,有时我们不仅需要简单的表格布局,还需要层次化的数据展示,也就是树形结构。本项目...

    C#WPF之DataGrid用法

    ### C# WPF中DataGrid的使用详解 #### 一、引言 DataGrid是WPF框架中的一个重要控件,用于展示数据集。它提供了强大的数据绑定能力,并且支持多种数据操作,如增删改查及分页等功能。本文旨在通过实例详细讲解...

    WPF中DataGrid里面的Checkbox实现单选

    WPF中DataGrid里面的Checkbox实现单选关键代码, 文档里面的代码复制粘贴即可实现!本人也是项目需要写的一个功能11行代码实现此功能! 希望可以帮助到你们!

    WPF中DataGrid自定义实现最后一行下面跟一个汇总行,类似MT4

    在WPF(Windows Presentation Foundation)开发中,DataGrid控件是一种常用的数据展示工具,它可以方便地展示表格数据并支持各种交互操作。本话题主要探讨如何在DataGrid中自定义实现最后一行后面添加一个汇总行,这...

    MVVM实现WPF中DataGrid动态列与编辑器

    10. **在View中使用**:最后,在XAML的View文件中,将ViewModel绑定到DataGrid的`ItemsSource`,并使用`DataTemplate`和`DataGrid.Columns`属性来引用ViewModel中动态生成的列和编辑模板。 通过以上步骤,你就能在...

    WPF DataGrid 中显示图片的小例子

    在Windows Presentation Foundation (WPF) 中,DataGrid控件是一个非常强大的数据展示工具,它可以用于显示和编辑结构化的数据。...希望这个教程对你在实际项目中使用WPF DataGrid展示图片有所帮助。

    WPF MVVM 模式使用DataGrid

    **在MVVM中使用DataGrid** 1. **数据绑定**:在MVVM中,DataGrid的数据源通常通过ViewModel中的ObservableCollection对象进行绑定。ObservableCollection是.NET Framework提供的一种动态数据集合,当集合中的元素...

    wpf通过datagrid操作数据库,实现datagrid增删改操作。

    在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)环境中使用DataGrid控件来操作数据库,实现数据的添加、删除和修改功能。DataGrid是WPF中的一个强大控件,它允许用户以表格的形式展示和编辑...

    WPF实现DataGrid嵌入ComBox绑定

    &lt;DataGrid.Columns&gt; &lt;DataGridTemplateColumn.CellTemplate&gt; , Mode=OneWay}" DisplayMemberPath="OptionName" SelectedValuePath="OptionId" SelectedValue="{Binding Path=SelectedOption, Mode=TwoWay,...

    WPF中DataGrid的空白行使用方法

    本文将深入探讨如何在`DataGrid`中使用空白行,这对于某些应用场景,如添加新记录或保留用户输入的空间,是很有用的。 `DataGrid`通常与数据绑定,自动根据数据源中的项生成行。然而,为了允许用户插入新的记录或...

    wpf中datagrid动态设置单元格背景

    在WPF(Windows Presentation Foundation)开发中,`DataGrid`控件是一个常用的数据展示组件,类似于Excel表格。它允许我们以表格形式展示数据,并提供了丰富的功能,如排序、分页、编辑等。当我们需要根据数据的...

    WPF DataGrid合并行

    6. **使用DataGrid.RowStyle中的DataGridRowHeader**:在某些情况下,可能需要合并表头。这可以通过调整DataGrid.RowStyle中的DataGridRowHeader来实现,但需要注意,WPF DataGrid本身并不直接支持行头的合并,可能...

    WPFDataGrid样式

    例如,使用`DataGridHeaderBorder`和`DataGridColumnHeader`可以改变列头的样式,`DataGridRow`和`DataGrid.RowStyle`则用于定制行的样式。`DataGridCell`则可以定制单元格的样式,包括选中和编辑状态。 3. **数据...

    wpf datagrid 折叠与展开的代码实现

    为了触发行的折叠与展开,你可以使用`DataGrid.RowDetailsVisibilityMode`属性。将其设置为`VisibleWhenSelected`或`Visible`,让用户通过单击行来显示详情,或者设置为`Collapsed`默认隐藏所有详情: ```xml ...

Global site tag (gtag.js) - Google Analytics