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 表格控件的前后台数据交互?的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF从后台代码生成行列可变的表格

wpf 设置控件的显示时间

C# WPF DataGrid获取单元格并改变背景色

C# WPF后台代码动态添加控件

C# WPF后台动态添加控件(经典)

C# WPF后台动态添加控件(经典)