在DevExpress AspxGridView中添加新的行/记录,这是绑定到DataSource

时间:2014-10-17 07:16:27

标签: asp.net vb.net webforms devexpress aspxgridview

我的问题非常简单。我想获取新插入的行值,并希望相应地更新GridView和我的数据源。

New Record

如图中突出显示的区域所示,我想在代码隐藏文件中获得电子邮件和其他字段。我正在使用WebForms/VB.NET

这是我的 aspx 代码。

<dx:ASPxGridView ID="ASPxGridView1" runat="server" AutoGenerateColumns="False" EnableTheming="True" Theme="DevEx" 
        OnDataBinding="ASPxGridView1_DataBinding" 
        OnRowUpdating="ASPxGridView1_RowUpdating"
        OnRowInserting="ASPxGridView1_RowInserting"
        OnRowInserted="ASPxGridView1_RowInserted"
        >
        <Columns>
            <dx:GridViewCommandColumn VisibleIndex="0">
                <EditButton Visible="True"/>
                <NewButton Visible="True"/>
                <DeleteButton Visible="True" />
            </dx:GridViewCommandColumn>
            <dx:GridViewDataColumn FieldName="Email" VisibleIndex="2" Name="Email"> 
                <EditFormSettings Caption="Email" />
            </dx:GridViewDataColumn>
            <dx:GridViewDataColumn FieldName="FirstName" VisibleIndex="3" Name="FirstName" />
            <dx:GridViewDataColumn FieldName="LastName" VisibleIndex="4" Name="LastName" />
            <dx:GridViewDataColumn FieldName="Password" VisibleIndex="5" Name="Password" />
            <dx:GridViewDataColumn FieldName="RetryCount" VisibleIndex="6" Name="RetryCount" />
            <dx:GridViewDataColumn FieldName="MaxRetryCount" VisibleIndex="7" Name="MaxRetryCount" />
        </Columns>
        <SettingsPopup>
            <EditForm Width="600" />
        </SettingsPopup>
    </dx:ASPxGridView>

这是我背后的代码。

Protected Sub ASPxGridView1_RowInserting(sender As Object, e As DevExpress.Web.Data.ASPxDataInsertingEventArgs)
    Dim gridView As ASPxGridView = CType(sender, ASPxGridView)

    ' What to write here???
    e.NewValues("Email") 'doesn't give anything
    e.NewValues("Email") = "SomeEmail" 'It is also not working

End Sub

此链接令人困惑:Inserting new Row

注意我没有使用DataTable

2 个答案:

答案 0 :(得分:0)

  

因为我怀疑你没有错过实体的实现   AspxGridView的框架。您正在分配EnitiyFramework   数据源到网格。可能你只是在创建一些List   数据源并分配它。

我建议您阅读以下KB和示例。它将告诉您如何在使用与EntityDataSource / Entity Framework绑定的ASPxGridView时实现常见方案。

<强>参考文献:

How to implement common scenarios when using ASPxGridView bound with EntityDataSource / Entity Framework
How to utilize CRUD operations within ASPxGridView bound with LinqDataSource when using Anonymous Types
ASPxGridView bound to EntityFramework - How t update data in several tables

根据文档,您将从e.NewValues字典中获取RowInserting事件的值。

手动CRUD操作:

1)插入: - 处理ASPxGridView.RowInserting事件;
- 创建DataContext实例;
- 创建一个新的DataItem并从e.NewValues字典中填充其属性;
- 将新的DataItem添加到相应的表中;
- 提交更改;
- 将eventArgs e.Cancel属性设置为&#34; true&#34;取消插入操作;
- 调用ASPxGridView.CancelEdit方法关闭EditForm。

答案 1 :(得分:0)

你可以试试这个:

  1. 关闭编辑表单
  2. 在aspxgridview上重新加载数据(这将刷新两者 datasource as datagrid):
  3. 我会把它放在c#中,但概念是一样的:

    angular.run(["$rootScope", "Access", "$location",
    function($rootScope, Access, $location) {
    
      "use strict";
    
      $rootScope.$on("$routeChangeError", function(event, current, previous, rejection) {
        if (rejection == Access.UNAUTHORIZED) {
          $location.path("/login");
        } else if (rejection == Access.FORBIDDEN) {
          $location.path("/forbidden");
        }
      });
    
    }]);