翼度科技»论坛 编程开发 .net 查看内容

WPF入门教程系列二十六——DataGrid使用示例(3)

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
WPF入门教程系列目录WPF入门教程系列二——Application介绍WPF入门教程系列三——Application介绍(续)
WPF入门教程系列四——Dispatcher介绍WPF入门教程系列五——Window 介绍
WPF入门教程系列十一——依赖属性(一)WPF入门教程系列十五——WPF中的数据绑定(一) 
五、DataGrid的DataGridComboBoxColumn列的绑定方式
  在上一篇文章的示例中,存在一个问题,在点击“刷新”按钮之后,城市这个ComboBox列的数据没有显示。

DataGridComboBoxColumn列如果要填充数据,首先要设置列的ItemsSouce属性,而且这个属性对于要绑定的数据源有以下的要求:


  • 1、静态资源。有关更多信息,请参见 StaticResource 标记扩展。
  • 2、x: 静态代码实体。有关更多信息,请参见 x:Static 标记扩展。
  • 3、ComboBoxItem 类型的内联集合。
1.  在使用DataGrid的时候,有时候需要使某些列为ComboBox,这时自然想到使用DataGridComboBoxColumn,但是如果使用的是ItemsSource数据绑定后台的对象,就会发现,这根本就不能用。

2.在Visual Studio 2022中打开MainWindow.cs文件,添加下拉框的绑定代码。具体代码如下:
  1.    private void BindDrp()
  2.         {
  3.             cboCity.ItemsSource=GetCitys();
  4.         }
  5.         private void btnRefresh_Click(object sender, RoutedEventArgs e)
  6.         {
  7.             BindGrid();
  8.             BindDrp();
  9.         }
复制代码
3. 在Visual Studio 2022中打开MainWindow.xaml文件,对DataGridComboBoxColumn进行了数据绑定。具体代码如下。
  1. [/code][align=left]       其中SelectedValuePath与DisplayMemberPath是指将绑定到DataGridComboBoxColumn列上的类中的哪个属性。例如上面的代码,code属性做为value值,Name属性做为在界面上呈现。[/align]
  2. [align=left]      通过SelectedValueBinding绑定的值,这个值由SelectedValuePath 所绑定的属性确定,呈现绑定对象上的属性。[/align]
  3. [align=left]      例如上述代码中,将SelectedValueBinding绑定到CityCode,当属性绑定发生变化时。通过SelectedValuePath=Code,表示我们通过Code这个关键字进行搜索,搜索绑定对象的Code值是否与CityCode值相同,相同返回City对象,而City对象中有Code属性和Name属性,并以Name属性进行显示。[/align]
  4. [align=left]4. 在Visual Studio 2022中按F5键,运行WFP应用程序,使用鼠标左键,点击“刷新”按钮,DataGrid中的城市列默认显示正确的绑定数据,如下图。[/align]
  5. [align=left] [align=center][/align][/align]
  6. [align=left]5. 下面是全部完成之后的实际的XAML代码。[/align]
  7. [code]<Window x:Class="WpfGridDemo.NET7.MainWindow"
  8.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  9.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  10.         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  11.         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  12.         xmlns:local="clr-namespace:WpfGridDemo.NET7"
  13.         mc:Ignorable="d"
  14.         Title="MainWindow" Height="600" Width="960">
  15.     <Grid>
  16.         <Grid.RowDefinitions>
  17.             <RowDefinition Height="100"></RowDefinition>
  18.             <RowDefinition Height="*"></RowDefinition>
  19.             <RowDefinition Height="25"></RowDefinition>
  20.         </Grid.RowDefinitions>
  21.         <DataGrid x:Name="gridArea" Grid.Row="1" d:ItemsSource="{d:SampleData ItemCount=5}" AutoGenerateColumns="False"<br> HorizontalAlignment="Left" VerticalAlignment="Top">
  22.             <DataGrid.Columns>
  23.                 <DataGridComboBoxColumn Header="城市" Width="120"  x:Name="cboCity" ClipboardContentBinding="{x:Null}" <br>SelectedValuePath="Code" SelectedValueBinding="{Binding Path=CityCode,UpdateSourceTrigger=PropertyChanged}"  <br>DisplayMemberPath="Name" SelectedItemBinding="{x:Null}" />
  24.                 <DataGridTextColumn Header="县区镇" Width="*" Binding="{Binding Name}" ClipboardContentBinding="{x:Null}"/>
  25.                 <DataGridTextColumn Header="邮编" Width="100"  Binding="{Binding Code}" ClipboardContentBinding="{x:Null}"/>
  26.                 <DataGridTextColumn Header="创建时间" Width="160" Binding="{Binding Created}" ClipboardContentBinding="{x:Null}"/>
  27.                 <DataGridTextColumn Header="更新时间" Width="160" Binding="{Binding Updated}" ClipboardContentBinding="{x:Null}"/>
  28.             </DataGrid.Columns>
  29.         </DataGrid>
  30.       
  31.         <WrapPanel Grid.Row="2">
  32.         <Button  x:Name="btnRefresh"  Height="22" Width="120" Click="btnRefresh_Click">刷新</Button>
  33.         <Button  x:Name="btnSave" Height="22" Width="120">保存</Button>
  34.         </WrapPanel>
  35.     </Grid>
  36. </Window>
复制代码
6.MainWidow.cs的全部代码,如下
  1. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using WpfGridDemo.NET7.Entitys; namespace WpfGridDemo.NET7{    ///     /// Interaction logic for MainWindow.xaml    ///     public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();        }        GridDbContext db = new GridDbContext();        protected List GetCitys()        {            List list = db.City.ToList();            return list;         }          protected List GetAreas()        {            List list = db.Area.ToList();            return list;        }         protected List GetProvinces()        {            List list = db.Province.ToList();            return list;        }        private void BindGrid()        {            gridArea.ItemsSource = GetAreas();        }        private void BindDrp()
  2.         {
  3.             cboCity.ItemsSource=GetCitys();
  4.         }
  5.         private void btnRefresh_Click(object sender, RoutedEventArgs e)
  6.         {
  7.             BindGrid();
  8.             BindDrp();
  9.         }    }}
复制代码
 

来源:https://www.cnblogs.com/chillsrc/archive/2023/05/28/17438067.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具