XAML能编辑的DataGrid里的复选框

开发工具与关键技术:DataGrid里的复选框

作者:邓崇富

撰写时间:2019 年7 月 27 日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  1. 首先在SQL Server数据库的存储过程中里需要处理一下复选框将要绑定的值。因为数据库保存的数据是true或false,但是当你用存储过程查出来的数据就不是true或false了,而是0或1,而界面要绑定的值是 true或false,而不是0或1。所以要进行转换,转换既可以在存储过程里写,也可以在界面的后台里写,但是为了在界面绑定时方便,我个人建议在存储过程里些比较方便,这样在界面后台绑定复选框时就不用从DataTable里面再一次遍历所有查出来的数据,取出该值作转换,然后再放到DataTable里面去绑定,而在存储过程里转换好之后,在界面后台直接绑定DataGrid表格的数据源即可。

数据库的存储过程的代码如下:

--查询费用种类信息

IF(@Type='UserControl_SelectChargeType')

    BEGIN

      SELECT

       RTRIM(SYS_ScheduleOfChar.ScheduleOfChargesI) as ScheduleOfChargesID,--费用种类ID

       RTRIM(SYS_ScheduleOfChar.ChineseName) as ChineseName,--中文名

       RTRIM(SYS_ScheduleOfChar.EnglishName) as EnglishName,--英文名

       RTRIM(SYS_CurrencyCatego.CurrencyCode) as CurrencyCode,--币种代码

       RTRIM(SYS_ScheduleOfChar.TheDefaultCode) as TheDefaultCode,--默认代

       RTRIM(SYS_ScheduleOfChar.TheDefaultUP) as TheDefaultUP,--默认单价

       <--下面四句是关键关键代码-- >

       RTRIM(case when SYS_ScheduleOfChar.Collect = 0 then 'False' else 'True' end) as Collect,--应收

       RTRIM(case when SYS_ScheduleOfChar.Payment = 0 then 'False' else 'True' end) as Payment,--应付

       RTRIM(case when SYS_ScheduleOfChar.Commission = 0 then 'False' else 'True' end) as Commission,--佣金

       RTRIM(case when SYS_ScheduleOfChar.SalesHiding = 0 then 'False' else 'True' end) as SalesHiding --销售隐藏

        FROM   SYS_ScheduleOfChar

        join SYS_CurrencyCatego on SYS_ScheduleOfChar.CurrencyCategoryID = SYS_CurrencyCatego.CurrencyCategoryID

    END

在转换时需要用到 case when …then…else…end语句,当查出复选框的字段的值等于0时,然后就返回false否则返回true,最后还可以把这个返回值重命名为界面复选框IsChecked值绑定的路径的名称。

下面是界面后台查询复选框的数据的方法(注意:省略了服务端的代码):

/// <summary>

        /// 表格查询

        /// </summary>

        private void SelectdgAccountManage()

        {

            //执行方法返回数据

            DataTable dt = myClient.UC_SelectChargeType().Tables[0];

            //绑定表格数据

            dgData.ItemsSource = dt.DefaultView;

            //禁用删除按钮初始化

            btn_Delete.IsEnabled = false;

            btn_Delete.Opacity = 0.3;

            //禁用保存按钮

            btn_Save.IsEnabled = false;

            btn_Save.Opacity = 0.3;

        }

说明:DataTable dt = myClient.UC_SelectChargeType().Tables[0];这句代码是接收服务端返回的数据;dgData.ItemsSource = dt.DefaultView;这句是把接收到的数据绑定到界面的DataGrid表格,而dgData就是DataGrid表格里的”x:Name”得值。

下面是界面的XAML一个复选框的代码(关键代码):

<DataGridTemplateColumn Width="*">

                        <DataGridTemplateColumn.HeaderTemplate>

                            <DataTemplate>

                                <TextBlock Text="默认单价" />

                            </DataTemplate>

                        </DataGridTemplateColumn.HeaderTemplate>

                        <DataGridTemplateColumn.CellTemplate>

                            <DataTemplate>

                                <TextBox Text="{Binding TheDefaultUP,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" BorderThickness="0">

                                    <TextBox.Resources>

                                        <VisualBrush x:Key="HintText" TileMode="None" Opacity="0.5" Stretch="None" AlignmentX="Left">

                                            <VisualBrush.Visual>

                                                <TextBlock FontStyle="Normal" Text="请输入"/>

                                            </VisualBrush.Visual>

                                        </VisualBrush>

                                    </TextBox.Resources>

                                    <TextBox.Style>

                                        <Style TargetType="TextBox">

                                            <Style.Triggers>

                                                <Trigger Property="Text" Value="{x:Null}">

                                                    <Setter Property="Background" Value="{StaticResource HintText}"/>

                                                </Trigger>

                                                <Trigger Property="Text" Value="">

                                                    <Setter Property="Background" Value="{StaticResource HintText}"/>

                                                </Trigger>

                                            </Style.Triggers>

                                        </Style>

                                    </TextBox.Style>

                               </TextBox>

                          </DataTemplate>

                     </DataGridTemplateColumn.CellTemplate>

        </DataGridTemplateColumn>

下面是运行后的效果图:

  XAML能编辑的DataGrid里的复选框

上一篇:c# – WPF MVVM绑定字典>到datagrid


下一篇:c# – 鼠标双击DataGrid行