Chr☆s Kwok 的技术笔记

.NET, C#, WPF, WCF, WF, .NetCore & LINQ ... I know how it works because I know why it works ...

博客园 首页 新随笔 订阅 管理

一、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;
}

 

posted on 2026-06-12 13:38  Chr☆s  阅读(5)  评论(0)    收藏  举报