C# WPF 表格控件的前后台数据交互?
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WPF 表格控件的前后台数据交互?相关的知识,希望对你有一定的参考价值。
概述
GridControl控件使用我们已经进行了实例讲解,这节内容我们列举一个特殊的应用场景:表格中有一列CheckBox,默认都处于勾选状态,当用户通过界面操作后,我们要确保用户至少选择了一项,相当于一次数据验证,这个怎么做呢?这里其实有个问题是,你每个checkbox的选中与取消选中,我们可以通过属性的set属性获知,但是难点在于我们每次操作的对象只是集合的一个实例,我们要知道集合中其它实例的状态就需要一些特殊的操作,可能比较绕,我们先看运行结果。
运行结果
源代码
前台:
<StackPanel>
<Label Content="this is a tab control page" Margin="5"/>
<dxg:GridControl ItemsSource="Binding GridParamItems" MaxHeight="400">
<dxg:GridColumn Header="姓名" FieldName="Name" Width="80" />
<dxg:GridColumn Header="选择" FieldName="IsChecked" Width="80" />
<dxg:GridColumn Header="选择" Width="80" >
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="Binding RowData.Row.IsChecked"
HorizontalAlignment="Center" VerticalAlignment="Center" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
</dxg:GridControl>
</StackPanel>
这里没啥新的内容,和上节一样,不清楚的看上一篇内容;
后台代码:
using PropertyChanged;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
namespace Caliburn.Micro.Hello
[AddINotifyPropertyChangedInterface]
public class SubTabPageViewModel
public ObservableCollection<GridParamDTO> GridParamItems get; set; = new ObservableCollection<GridParamDTO>();
public SubTabPageViewModel()
GridParamItems.Add(new GridParamDTO() Name = "张三", IsChecked = true );
GridParamItems.Add(new GridParamDTO() Name = "李四", IsChecked = true );
public class GridParamDTO
public string Name get; set;
private bool isChecked;
public bool IsChecked
get
return isChecked;
set
try
if (!value)
var keyValue = Name;
if (IsCheckedDic.Count == 2)
keyValue = IsCheckedDic.Keys.Where(k => k != Name).ToList()[0];
if (IsCheckedDic.Count == 1
|| IsCheckedDic.Count == 2 && !IsCheckedDic[keyValue])
MessageBox.Show("至少得勾选一个人");
if (!IsCheckedDic.Keys.Contains(Name))
IsCheckedDic.Add(Name, isChecked);
else
IsCheckedDic[Name] = isChecked;
return;
isChecked = value;
if (!IsCheckedDic.Keys.Contains(Name))
IsCheckedDic.Add(Name, isChecked);
else
IsCheckedDic[Name] = isChecked;
catch(Exception ex)
MessageBox.Show($"ex");
public static Dictionary<string,bool> isCheckedDic;
public static Dictionary<string, bool> IsCheckedDic
get
if(isCheckedDic == null)
isCheckedDic = new Dictionary<string, bool>();
return isCheckedDic;
set
isCheckedDic = value;
这里我们增加了一个静态的字典,每次将我们当前是否选中的一个状态存起来,这样每次前台界面进行操作以后,我们就可以通过字典中的信息去进行判断目前是否至少有一个人员信息被选中了.感觉方法不够丝滑,如有更好的方法实现这个需求,麻烦给小编留言!
以上是关于C# WPF 表格控件的前后台数据交互?的主要内容,如果未能解决你的问题,请参考以下文章