一、GridManager.ResetState方法使用:
IDataGridManager<IOrderPrescription> _gridManager;
_gridManager.ResetState(order); // 该语句可以重新展现这行数据被更新的内容及状态变化(基于表达式触发)
二、DataGrid的行样式被执行的RowStyle与特定单元格样式CellStyle兼用的方法:
当DataGrid的行样式被执行的RowStyle定义后,譬如当已收费时整行的背景色变为淡灰色,此时如可编辑的单元格看起来就像不可输入,需要定义单元格样式CellStyle用于该单元格,如样例中的“OffLabelCellStyle”:
<DataGrid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:js="http://schemas.jetsun.com.cn/his/2009/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
<DataGrid.Resources>
<Style x:Key="OffLabelCellStyle" TargetType="DataGridCell" js:MarkupHelper.BaseOnKey="{x:Static js:Markup.DataGridCellStyleKey}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=HasCharged}" Value="true">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=HasCharged}" Value="false" />
<Condition Binding="{Binding Path=IsOffLabelUseDrugReasonLocked}" Value="false" />
<Condition Binding="{Binding Path=IsEditable}" Value="true" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="#e0ffff" />
</MultiDataTrigger>
<Trigger Property="IsSelected" Value="true" >
<Setter Property="Background" Value="#3399FF" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=HasCharged}" Value="true">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=ConsumableClass.IsClinicItem}" Value="true" >
<Setter Property="Background" Value="#ffffc0" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=ConsumableClass.IsMedicalItem}" Value="true" >
<Setter Property="Background" Value="#ffffc0" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=ConsumableClass.IsMaterial}" Value="true">
<Setter Property="Background" Value="#ccffcc" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=ConsumableClass.IsMedicine}" Value="true">
<Setter Property="Background" Value="#ffeeaa" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsNew}" Value="true">
<Setter Property="Background" Value="LightSkyBlue" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=HasCharged}" Value="true">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="主" MinWidth="20" Binding="{Binding IsMain}" js:GridDecorator.CellLockedCondition="{StaticResource MainCellLockedExpr}" CellStyle="{StaticResource MainCellStyle}" />
<DataGridTextColumn Header="序号" MinWidth="20" Binding="{Binding Ordinal}" IsReadOnly="True" />
<DataGridCheckBoxColumn Header="收费" MinWidth="60" Binding="{Binding HasCharged}" IsReadOnly="True" />
<DataGridTemplateColumn Header="编码" MinWidth="80" js:GridDecorator.Binding="{Binding Substance.Code}" js:GridDecorator.EditorKind="EntityPicker" CellStyle="{StaticResource ChargedCellStyle}"
js:GridDecorator.CellLockedCondition="{StaticResource ChargedCellLockedExpr}"/>
<DataGridTextColumn Header="条码" MinWidth="80" Binding="{Binding MaterialBarCode}" IsReadOnly="True" />
<DataGridTemplateColumn Header="项目" MinWidth="200" js:GridDecorator.Binding="{Binding Substance.Name}" IsReadOnly="True" />
<DataGridTemplateColumn Header="说明" MinWidth="20" js:GridDecorator.Binding="{Binding Description}" IsReadOnly="True" />
<DataGridTemplateColumn Header="规格" MinWidth="20" js:GridDecorator.Binding="{Binding Strength}" IsReadOnly="True" />
<DataGridTextColumn Header="数量" MinWidth="20" Binding="{Binding Quantity, UpdateSourceTrigger=LostFocus, StringFormat=0.00}" CellStyle="{StaticResource ChargedCellStyle}"
js:GridDecorator.CellLockedCondition="{StaticResource ChargedCellLockedExpr}"/>
<DataGridTextColumn Header="金额" MinWidth="20" Binding="{Binding Amount, UpdateSourceTrigger=LostFocus, StringFormat=0.00}" CellStyle="{StaticResource AmountCellStyle}"
js:GridDecorator.CellLockedCondition="{StaticResource AmountCellLockedExpr}"/>
<DataGridTemplateColumn Header="适应症标识" MinWidth="20" js:GridDecorator.Binding="{Binding AccordDiseaseKind.Name}" IsReadOnly="True" />
<DataGridTemplateColumn Header="超说明书用药" Width="120" CellStyle="{StaticResource OffLabelCellStyle}"
js:GridDecorator.EditorKind="EntityPicker"
js:GridDecorator.Binding="{Binding OffLabelUseDrugReason.Name}"
js:GridDecorator.CellHiddenCondition="{StaticResource OffLabelUseDrugReasonHiddenExpr}"
js:GridDecorator.CellLockedCondition="{StaticResource OffLabelUseDrugReasonLockedExpr}">
<DataGridTemplateColumn.CellEditingTemplate >
<DataTemplate>
<TextBox Text="{Binding OffLabelUseDrugReasonNames}" BorderThickness="0"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding OffLabelUseDrugReasonNames}" Background="Transparent"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
三、多选的拾取器注意需要设置:没选定返回当前属性为 false
_offReasonPicker.UnselectReturnCurrent = false;
if (_offReasonPicker != null)
{
_offReasonPicker.DataIsExpired = true;
_offReasonPicker.IsMultiSelected = true;
_offReasonPicker.IsReturnEmptyEntiyWithClearText = true;
_offReasonPicker.UnselectReturnCurrent = false;
_offReasonPicker.DefaultMulitSelectedItems = OffLabelUseDrugReasonsDefaultMulitSelectedItems;
_offReasonPicker.DataProvider = this.OffLabelUseDrugReasonsDataProvider;
_offReasonPicker.DataAcceptor = this.OffLabelUseDrugReasonsDataAcceptor;
}
private ActionResult OffLabelUseDrugReasonsDataAcceptor(PickResult result)
{
if (this.Grid.Current == null) return ActionResult.Cancel;
var lst = result.Items.CastAs<OffLabelUseDrugReasonCode>().Where(a => a.Id != -1).ToList();
this.Grid.Current.OffLabelUseDrugReasons = lst;
_offReasonPicker.SetEditText(lst.ToStringEx(","));
this.Grid.DataGrid.CommitEdit();
DataGridColumn col = this.Grid.DataGrid.FindColumn("GSInjuriesKind");
if (col != null && !this.Grid.Current.HasCharged && !this.Grid.Current.CanEditGSInjuriesKind)
{
this.Grid.Current.GSInjuriesKind = lst.Count > 0 ? GSInjuriesKind.Create(1) : GSInjuriesKind.Create(0);
}
return ActionResult.Success;
}
浙公网安备 33010602011771号