【问题标题】:DevExpress grid's RowValidating event returning null on e.NewValuesDevExpress 网格的 RowValidating 事件在 e.NewValues 上返回 null
【发布时间】:2013-08-28 00:18:23
【问题描述】:

根据我一直在阅读的内容,e.NewValues 应该填充已更新的新值,因为 FieldName 传递给它。但我每次都为空。

这是调试视图。我正在更改 ShalePlay 字段的值,并且 RowValidating 事件按预期触发。但是检查 NewValue 会返回 null。

关于我在这里做错了什么有什么想法吗?

编辑:标记:

<dx:ASPxGridView
ID="gvLocation"
runat="server"
AutoGenerateColumns="False"
DataSourceID="esmdsLocation"
ClientInstanceName="gvLocation"
ViewStateMode="Disabled"
KeyFieldName="LocationPK"
Width="600px"
OnCellEditorInitialize="gvLocation_CellEditorInitialize"
OnCommandButtonInitialize="gvLocation_CommandButtonInitialize"
OnStartRowEditing="gvLocation_StartRowEditing"
OnRowValidating="gvLocation_RowValidating">

<%--  <ClientSideEvents BeginCallback="
                        function(s, e) {loadingPanel.Show();}"
    EndCallback="
                        function(s, e) {loadingPanel.Hide();}" />--%>
<Columns>
    <dx:GridViewCommandColumn VisibleIndex="0">
        <EditButton Visible="True">
        </EditButton>
        <NewButton Visible="True">
        </NewButton>
    </dx:GridViewCommandColumn>
    <dx:GridViewDataHyperLinkColumn FieldName="LocationPK" ReadOnly="True" ShowInCustomizationForm="True" VisibleIndex="1">
        <DataItemTemplate>
            <a href="javascript:void(0);" onclick="gvLocation_LinkClick('<%# Container.VisibleIndex %>');"><%# DataBinder.Eval(Container.DataItem,"LocationPK") %></a>
        </DataItemTemplate>
    </dx:GridViewDataHyperLinkColumn>

    <dx:GridViewDataTextColumn FieldName="LocationName" ShowInCustomizationForm="True" VisibleIndex="2" />
    <dx:GridViewDataComboBoxColumn FieldName="FieldType" ShowInCustomizationForm="True" VisibleIndex="3" />
    <dx:GridViewDataComboBoxColumn FieldName="County" ShowInCustomizationForm="True" VisibleIndex="4" />
    <dx:GridViewDataComboBoxColumn FieldName="State" ShowInCustomizationForm="True" VisibleIndex="5" />
    <dx:GridViewDataComboBoxColumn FieldName="ShalePlay" ShowInCustomizationForm="True" VisibleIndex="6" />
</Columns>
<Settings ShowFilterBar="Visible" ShowFilterRow="True" ShowGroupPanel="True" />
<SettingsBehavior AllowFocusedRow="True" />
<SettingsLoadingPanel Mode="Disabled" />

【问题讨论】:

    标签: c# asp.net devexpress aspxgridview


    【解决方案1】:

    听起来最有可能发生以下两种情况之一:

    可能性 1. 您在每次页面加载时填充 GridView(将数据绑定到它),而不使用 if(!Page.IsPostBack) 过滤器。这将导致您的 NewValues 集合为空,因为 Grid 是从数据源中重新填充的。

    您需要在页面加载时在这样的块内进行数据绑定:

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        {
            BindGrid();
        }
    }
    

    上面的“BindGrid”是您用来将数据绑定到您的 aspxGridView 的任何进程/方法/代码。

    可能性 2。“ShalePlay”不是填充 GridView 的数据源中的字段名称。请注意,这可能与数据库中列的名称不同(取决于 GridView 的填充方式)。

    为此,您需要检查数据源并确保字段名称符合您的预期。

    【讨论】:

    • 我不认为这是第二个问题。我将 FieldName 更改为不同的名称,“Shale Play”,只是为了测试。那次我得到了一个完全不同的错误。它实际上说,“在所选数据中未找到名为‘Shale Play’的字段或属性。”对于问题一,数据源在设计时被绑定。我们有一个 EntityServerModeDataSource 控件,它绑定到 DataSourceID 属性。
    • @ernest 哦,好的。如果您编辑问题以包含相关标记(网格和数据源),这将很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多