开发工具与关键技术: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保存到子表里即可。