0

鉴于,

    <igDP:XamDataGrid Name="dataGrid" 
                          DataSource="{Binding RecordList}">
            <igDP:XamDataGrid.FieldLayoutSettings >
                <igDP:FieldLayoutSettings AllowAddNew="true" AddNewRecordLocation="OnTopFixed"/>
            </igDP:XamDataGrid.FieldLayoutSettings>

运行时,我可以在网格顶部看到一个空的新行。但是新行中的所有列都不可编辑!当我将每个字段标记为可编辑时,这些列是可编辑的。

是否可以在“不”明确地将每个字段标记为可编辑的情况下使添加记录功能正常工作?

感谢您的关注。

4

1 回答 1

2

你最好在 infragistics netadvantage 论坛上问这个问题,但话虽如此......

据我了解,您想要的是一个只读数据网格(在其单元格上不可编辑)具有可编辑的行来添加新项目......

  1. CellValuePresenter. Style_ XamDatagrid.Resources_
  2. 这将检查给定的单元格值呈现器是否聚焦并表示添加新行。
  3. 如果是这样,它将通过一些附加行为使父字段可编辑。

    <igDP:XamDataGrid Grid.Row="1"
                      DataSource="{Binding}"
                      AutoFit="True">
        <igDP:XamDataGrid.Resources>
            <Style TargetType="{x:Type igDP:CellValuePresenter}">
                <Style.Triggers>
                    <MultiDataTrigger>                           
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding IsFocused,
                                       RelativeSource={RelativeSource Self}}"
                                       Value="True"/>
                            <Condition Binding="{Binding Record.IsAddRecord,
                                       RelativeSource={RelativeSource Self}}"
                                       Value="True"/>
                        </MultiDataTrigger.Conditions>
                        <Setter 
                            Property="local:CellValuePresenterBehavior.AllowFieldEdit"
                            Value="True"/>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </igDP:XamDataGrid.Resources>
        <igDP:XamDataGrid.FieldLayouts>
            <igDP:FieldLayout>
                <!-- Only show the first 4 fields to keep the display simple -->
                <igDP:Field Name="Key" Visibility="Visible">                        
                    <igDP:Field.Settings>
                        <igDP:FieldSettings
                                 EditAsType="{x:Type System:String}"
                            EditorType="{x:Type Editors:XamTextEditor}" 
                                 AllowEdit="False"/>
                    </igDP:Field.Settings>
                </igDP:Field>
                <igDP:Field Name="Value" Visibility="Visible">
                    <igDP:Field.Settings>
                        <igDP:FieldSettings
                                 EditAsType="{x:Type System:String}"
                            EditorType="{x:Type Editors:XamTextEditor}" 
                                 AllowEdit="False"/>
                    </igDP:Field.Settings>
                </igDP:Field>
            </igDP:FieldLayout>
        </igDP:XamDataGrid.FieldLayouts>
        <igDP:XamDataGrid.FieldLayoutSettings>
            <igDP:FieldLayoutSettings AutoGenerateFields="False"
                                      AllowAddNew="True"
                                      AddNewRecordLocation="OnTopFixed"
                                      HighlightAlternateRecords="True"/>
        </igDP:XamDataGrid.FieldLayoutSettings>
    </igDP:XamDataGrid>
    

附加的行为如下......

public class CellValuePresenterBehavior
{
    public static DependencyProperty AllowFieldEditProperty
        = DependencyProperty.RegisterAttached(
            "AllowFieldEdit",
            typeof(bool),
            typeof(CellValuePresenterBehavior),
            new PropertyMetadata(false, OnAllowFieldEditChanged));

    private static void OnAllowFieldEditChanged(
        DependencyObject depObj,
        DependencyPropertyChangedEventArgs args)
    {
        var cvp = depObj as CellValuePresenter;
        if (cvp != null)
        {
            cvp.Field.Settings.AllowEdit = (bool)args.NewValue;
        }
    }

    public static bool GetAllowFieldEdit(DependencyObject depObj)
    {
        return (bool) depObj.GetValue(AllowFieldEditProperty);
    }

    public static void SetAllowFieldEdit(DependencyObject depObj, bool value)
    {
        depObj.SetValue(AllowFieldEditProperty, value);
    }
}

希望这可以帮助。

于 2011-10-07T08:01:10.723 回答