2013-08-30 5 views
1

При нажатии на кнопку "edit" на моем ASPxGridView, Событие StartRowEditing огни. Когда это происходит, я устанавливаю локальную переменную, называемую "IsEditing" Так что, когда CellEditorIntialize, я могу установить источник данных для своего comboboxes. Я делаю это, потому что, если пользователь нажимает на отмену, событие CellEditorInitialize срабатывает снова, и поскольку combobox недоступен, я получаю нулевую ссылочную проблему.Есть ли способ вызвать код на стороне сервера при нажатии кнопки «Создать»?

Мне нужно сделать то же самое для кнопки "new", но нет "StartSrowInserting" события.

Любые идеи?

Вот код сервера, на C#.

Это StartRowEditingEvent:

protected void gvLocation_StartRowEditing(object sender, DevExpress.Web.Data.ASPxStartRowEditingEventArgs e) 
    { 
     this.IsEditing = true; //There's not editing property in this event, so everytime it fires, we'll set this flag to true 
     if (e.Cancel) //And we'll only set the flag to false when canceling 
      this.IsEditing = false; 
    } 

При нажатии на кнопку "Изменить" на ASPxGridView, это событие срабатывает. Он установит эту переменную в true. Если пользователь отменяет диалог, он установит значение false.

Затем при инициализации элементов управления происходит событие CellEditorInitialize.

protected void gvLocation_CellEditorInitialize(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewEditorEventArgs e) 
    { 
     e.Column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False; 

     if (this.IsEditing) //Only populate fields when editing 
     { 
      if (e.Column.FieldName == "LocationPK") 
       e.Editor.Visible = false; //We don't want LocationPK to be updated 
      else if (e.Column.FieldName == "ShalePlay") 
      { 
       ASPxComboBox combo = (ASPxComboBox)e.Editor; 
       mcCommon.Setup(ref combo, true, LookupValuesShalePlay.List, "Description", "PK"); 
      } 
      else if (e.Column.FieldName == "FieldType") 
      { 
       ASPxComboBox combo = (ASPxComboBox)e.Editor; 
       mcCommon.Setup(ref combo, true, LookupValuesFieldType.List, "Description", "PK"); 
      } 
      else if (e.Column.FieldName == "County") 
      { 
       ASPxComboBox combo = (ASPxComboBox)e.Editor; 
       mcCommon.Setup(ref combo, true, LookupValuesCounty.List, "Description", "PK"); 
      } 
      else if (e.Column.FieldName == "State") 
      { 
       ASPxComboBox combo = (ASPxComboBox)e.Editor; 
       mcCommon.Setup(ref combo, true, LookupValuesState.List, "Description", "PK"); 
      } 
      else 
      { 

      } 
     } 
    } 

Я определяю, какой элемент управления является источником и назначить источники данных. Если я не использую этот флаг, когда пользователь отменяет редактирование, он выдает исключение null. Это событие также срабатывает, когда пользователь нажимает «Создать» или «Отмена» при вставке. Но нет никакого события, которое я могу найти, которое срабатывает при нажатии кнопки «новый» перед тем, как загорится CellEditorInitiliaze.

Так что мне нужно установить этот флаг, когда пользователь нажимает кнопки «новый» и «отменить», поэтому я могу установить флаг.

Вот разметка для ASPxGridView.

<dx:ASPxGridView 
ID="gvLocation" 
runat="server" 
AutoGenerateColumns="False" 
DataSourceID="edsLocations" 
ClientInstanceName="gvLocation" 
ViewStateMode="Disabled" 
KeyFieldName="LocationPK" 
Width="600px" 
OnCellEditorInitialize="gvLocation_CellEditorInitialize" 
OnCommandButtonInitialize="gvLocation_CommandButtonInitialize" 
OnStartRowEditing="gvLocation_StartRowEditing" 
> 
    <ClientSideEvents BeginCallback=" 
        function(s, e) {loadingPanel.Show();}" 
EndCallback=" 
        function(s, e) {loadingPanel.Hide();}" /> 
<Columns> 
    <dx:GridViewDataHyperLinkColumn FieldName="LocationPK" ReadOnly="True" VisibleIndex="0" Visible="false"> 
     <PropertiesHyperLinkEdit TextField="LocationPK" /> 
    </dx:GridViewDataHyperLinkColumn> 
    <dx:GridViewDataTextColumn FieldName="LocationName" VisibleIndex="1"> 
     <DataItemTemplate> 
      <a href="javascript:void(0);" onclick="gvLocation_LinkClick('<%# Container.VisibleIndex %>');"><%# DataBinder.Eval(Container.DataItem,"LocationName") %></a> 
     </DataItemTemplate> 
    </dx:GridViewDataTextColumn> 
    <dx:GridViewDataComboBoxColumn FieldName="FieldType" VisibleIndex="2"> 
     <PropertiesComboBox TextField="FieldType" ValueField="FieldType" /> 
    </dx:GridViewDataComboBoxColumn> 
    <dx:GridViewDataComboBoxColumn FieldName="State" VisibleIndex="4"> 
     <PropertiesComboBox ValueField="State" TextField="State" /> 
    </dx:GridViewDataComboBoxColumn> 
    <dx:GridViewDataComboBoxColumn FieldName="CountyName" VisibleIndex="3"> 
     <PropertiesComboBox ValueField="CountyName" TextField="CountyName" ValueType="System.String" DataSourceID="edsCounty" /> 
    </dx:GridViewDataComboBoxColumn> 
    <dx:GridViewDataComboBoxColumn FieldName="ShalePlay" VisibleIndex="5"> 
     <PropertiesComboBox ValueField="ShalePlay" TextField="ShalePlay" /> 
    </dx:GridViewDataComboBoxColumn> 
    <dx:GridViewCommandColumn VisibleIndex="6"> 
     <EditButton Visible="True"> 
     </EditButton> 
     <NewButton Visible="True"> 
     </NewButton> 
    </dx:GridViewCommandColumn> 
</Columns> 
<Settings ShowFilterBar="Visible" ShowFilterRow="True" ShowGroupPanel="True" /> 
<SettingsBehavior AllowFocusedRow="True" /> 
<SettingsLoadingPanel Mode="Disabled" /> 

+1

Вы можете разместить свой код пожалуйста! –

+0

@surajsingh Вы хотите увидеть разметку или код сервера? – ernest

+1

Оба, если вы еще не можете использовать код сервера, будут хороши! –

ответ

2

Вы можете использовать ASPxGridView.InitNewRow поймать, когда новая вставка инициируется. Затем вы можете использовать ASPxGridView.CancelRowEditing, чтобы поймать отмену.

http://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridViewASPxGridView_InitNewRowtopic

http://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridViewASPxGridView_CancelRowEditingtopic