在网格中插入行后从新项目行获取数据

Posted

技术标签:

【中文标题】在网格中插入行后从新项目行获取数据【英文标题】:Get data from NewItemRow after row inserted in grid 【发布时间】:2017-11-22 05:43:02 【问题描述】:

我正在使用 DevExpress XPF GridControl 的 NewItemRow 向我的数据库添加新行。如何从新行中获取用户输入的数据。我正在使用棱镜框架。这是我的xml

         <dxg:GridControl.View>
            <dxg:TableView AutoWidth="True" AllowEditing="True" NewItemRowPosition="Top">       
                <dxmvvm:Interaction.Behaviors>
                    <dxmvvm:EventToCommand EventName="RowUpdated" 
                                           Command="Binding RowUpdateClickCommand" CommandParameter="Binding CurrentItem"/>
                </dxmvvm:Interaction.Behaviors>
            </dxg:TableView>
        </dxg:GridControl.View>

【问题讨论】:

【参考方案1】:

要获取有关更新行的信息,您可以将 EventArgs 传递给您的命令。要完成此任务,请将 EventToCommand.PassEventArgsToCommand 属性设置为 true:

<dxmvvm:EventToCommand EventName="RowUpdated" PassEventArgsToCommand="True"
                        Command="Binding RowUpdateClickCommand"/>

要确定用户修改了 NewItemRow,您可以将 RowEventArgs.RowHandle 与静态 GridControl.NewItemRowHandle 属性进行比较:

public class MyViewModel 
    public MyViewModel() 
        RowUpdateClickCommand = new DelegateCommand<RowEventArgs>(RowUpdateClick);
    
    public ICommand RowUpdateClickCommand 
        get;
        set;
    
    public void RowUpdateClick(RowEventArgs e) 
        if (e.RowHandle == GridControl.NewItemRowHandle) 
            //e.Row -  new row is here
        
    

请注意,如果您不希望将事件参数传递到视图模型级别,可以使用 EventArgsConverter 进行转换

【讨论】:

如何将此事件传递给视图模型?你能分享一些例子吗 我已更新我的答案以演示如何定义命令以使其接受 RowEventArgs。当您将 PassEventArgsToCommand 设置为 true 时,EventToCommand 将在引发事件时自动将事件参数传递给命令

以上是关于在网格中插入行后从新项目行获取数据的主要内容,如果未能解决你的问题,请参考以下文章

可编辑的网格 ExtJS,如何在网格上编辑行后更新数据库中的行

jquery给表格动态添加删除行后如何获取数据

EF Generic Repository 从新插入的通用实体获取 Id

ExtJS 间隔计时器获取数据并在网格中插入新行

插入行后更新 DGV

克隆行后 DataGridView 不显示数据