查找活动单元格内的编辑器(XamDataGrid)infragistics

时间:2015-04-22 13:09:21

标签: wpf wpf-controls infragistics xamdatagrid

如何在infragistics xamdatagrid中找到基于ActiveRecord或ActiveCell的cellvaluepresenter?

我尝试了下面的代码,但它在单元格值演示器中给出了null。

    private void grdGrid_RecordActivated(object sender,RecordActivatedEventArgs e)
    {          

  (grdGrid.ActiveRecord as DataRecord).Cells["fldDescription"].IsActive = true;

            Cell selectedCell = grdGrid.ActiveCell;

            CellValuePresenter cvp = CellValuePresenter.FromCell(selectedCell);

            cvp.Editor.StartEditMode();

}

这是绑定

<igDP:UnboundField  Name="fldDescription" Label="Description" BindingPath="TaskItemAction.Description" BindingMode="TwoWay">
                                                            <igDP:Field.Settings>
                                                                <igDP:FieldSettings CellClickAction="EnterEditModeIfAllowed" EditorStyle="{StaticResource textStyleKey}" EditorType="{x:Type editors:XamTextEditor}" EditAsType="{x:Type sys:String}" 
                                                        CellWidth="30" CellHeight="30" AllowEdit="True" Width="0.4*" Height="30" >

                                                                </igDP:FieldSettings>
                                                            </igDP:Field.Settings>

所以现在我想通过该事件找到激活记录并找到编辑器类型并开始编辑模式。

    private void GrdTaskItemAction_RecordActivated(object sender, RecordActivatedEventArgs e)
            {
    grdGrid.ExecuteCommand(DataPresenterCommands.StartEditMode);
} 

对我来说工作正常,但它正在调用单元格的编辑模式而不是编辑器(控件内部)。

我想在激活的单元格中找到该编辑器并使其开始可编辑类型。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用RecordActivatedEventArgs方法从GetChildCellValuePresenters()获取它。

var cellValuePresenters = ((DataRecordPresenter)e.Record).GetChildCellValuePresenters()

然后你必须为你需要的cellValuePresenter过滤数组。

编辑:更新了代码以ct the cellValuePresenters,忘记将其投射到DataRecordPresenter上。但既然你说你的问题不同,我会再次研究它。

答案 1 :(得分:0)

使用以下代码: (如果您已经拥有CellValuePresenter

      CellValuePresenter cvp = new CellValuePresenter();

        ValueEditor VE = Infragistics.Windows.Utilities.GetDescendantFromType(cvp, typeof(ValueEditor), true) as ValueEditor;
        if (VE != null)
        {
            VE.IsInEditMode = true;
        }

Editor Lib中的每个Infragistics都来自ValueEditor,因此请将其用作Editor的参考号。