2013-08-26 1 views
0

Из того, что я читал, e.NewValues ​​должен заполнить новое значение, которое было обновлено, для переданного ему FieldName. Но я получаю null каждый раз.Событие RowValidating сетки DevExpress, возвращающее значение null на e.NewValues ​​

А вот вид отладки. Я изменяю значение поля ShalePlay, и событие RowValidating запускается, как ожидалось. Но проверка NewValue возвращает null.

enter image description here

Любые идеи о том, что я делаю неправильно здесь?

EDIT: Разметка:

<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" /> 

ответ

0

Это звучит как одна из двух вещей, скорее всего, происходит:

Possiblity 1. Вы заселение ваш GridView (связывание данных для его) на каждую загрузку страницы без использования фильтра if(!Page.IsPostBack). Это приведет к тому, что ваша коллекция NewValues ​​будет пустой, потому что Grid вновь заполняется из источника данных.

Вы должны сделать свою привязку данных в пределах блока, как это на странице загрузки:

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

Где «BindGrid» выше любой процесс/способ/код, используемый для привязки данных к вашему aspxGridView.

or возможность 2. «ShalePlay» - это не название поля в источнике данных, заполняющем ваш GridView. Обратите внимание, что это может быть иначе, чем, например, имя столбца в вашей базе данных (в зависимости от того, как заполняется GridView).

Для этого вам необходимо проверить свой источник данных и убедиться, что имя поля - это то, что вы ожидаете от него.

+0

Я не думаю, что это проблема вторая. Я изменил FieldName на другое имя «Shale Play», просто чтобы проверить. В то же время я получил совершенно другую ошибку. И он на самом деле сказал: «Полевое поле или свойство с именем« Shale Play »не было найдено в выбранных данных». Для первого вопроса источник данных привязан во время разработки. У нас есть элемент управления EntityServerModeDataSource, связанный с свойством DataSourceID. – ernest

+0

@ernest О, ладно. Было бы полезно, если бы вы отредактировали свой вопрос, включив соответствующую разметку (сетку и источник данных). – jadarnel27

+0

Я включил разметку для сетки. – ernest