XAML获取能编辑的DataGrid表格数据与及多表新增数据

开发工具与关键技术:Visual Studio 2017

作者:邓崇富

撰写时间:2019 年 7 月 27 日

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

获取能够进行编辑的DataGrid表格所编辑行的数据和平常那些获取文本框所输入的数据有一点不一样,当然我尝试过用以一些常用的获取方法去获取,结果是可想而知的,当然获取不到DataGrid表格所输入的数据,还有就是无论你在DataGrid表格里输入的是字符串或者是整型数字又或者是一个ID也罢,在后台获取时只能以字符串的形式去获取然后再进行数据类型转换,并且只能一个一个DataGrid表格的单元格的数据进行获取,而不能一次性获取正行所有单元格的数据(当然,可能我这种获取的方法是一个最愚蠢的获取方法,不排除还有一些更好的获取方法)。

下面是DataGrid表格的效果图:

复选框选择就获取true不选择就获取false。

下面是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>

                    <DataGridTemplateColumn Width="*">

                        <DataGridTemplateColumn.HeaderTemplate>

                            <DataTemplate>

                                <TextBlock Text="应收" />

                            </DataTemplate>

                        </DataGridTemplateColumn.HeaderTemplate>

                        <DataGridTemplateColumn.CellTemplate>

                            <DataTemplate>

                                <CheckBox IsChecked="{Binding Collect, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalContentAlignment="Center"  HorizontalAlignment="Center"/>

                            </DataTemplate>

                        </DataGridTemplateColumn.CellTemplate>

                    </DataGridTemplateColumn>

上面是编辑的DataGrid表格的一个输入的单元格和一个复选框的代码;TheDefaultUP是单元格绑定数据源的名称同时也将要获取值的名称,同理复选框也是一样(Collect)
下面是XAML后台的部分代码(关键代码):

int TheDefaultUP = Convert.ToInt32(((DataRowView)dgData.SelectedItem as DataRowView)["TheDefaultUP"]); string Collect = ((DataRowView)dgData.SelectedItem as DataRowView)["Collect"].ToString();

至于后面的数据处理的方法和服务端的一些方法就不一一说了,直接进入多表新增数据。

下面是多表新增数据的存储过程:

IF(@type='SaveInsertCostCategory')

    BEGIN

     --EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False

     --EXISTS 指定一个子查询,检测 行 的存在。

    IF exists(select 0 from SYS_ScheduleOfChar where TheDefaultCode=@TheDefaultCode)

        begin          

            RETURN

        end

    ELSE

        begin  

            declare @ID int

            insert into SYS_CurrencyCatego(CurrencyCode)

            values (@CurrencyCode)

            set @ID = @@IDentity

            insert into SYS_ScheduleOfChar(TheDefaultCode,ChineseName,EnglishName,CurrencyCategoryID,TheDefaultUP,Collect,Payment,Commission,SalesHiding)

            values (@TheDefaultCode,@ChineseName,@EnglishName,@ID,@TheDefaultUP,@Collect,@Payment,@Commission,@SalesHiding)

        end

    END

代码中的declare @ID int的作用是声明一个变量(@ID),用来存放父表所新增数据的ID的值,而@@Identity的作用就是获取父表所新增那条数据的ID,最后把所获取到的ID保存到子表里即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值