2013-08-30 3 views
1

ASPxGridView"edit" 버튼을 클릭하면 StartRowEditing 이벤트이 발생합니다. 이 문제가 발생하면 로컬 변수 "IsEditing"을 설정하여 CellEditorIntialize이 발생하면 comboboxes에 대한 데이터 소스를 설정할 수 있습니다. 사용자가 취소를 누르면 CellEditorInitialize 이벤트가 다시 발생하고 combobox을 사용할 수 없기 때문에 null 참조 문제가 발생하므로이 작업을 수행합니다."새로 만들기"버튼을 누르면 서버 측 코드를 호출하는 방법이 있습니까?

"new" 버튼도 동일하게 처리해야하지만, "StartSrowInserting" 이벤트는 없습니다.

아이디어가 있으십니까?

다음은 C#의 서버 코드입니다.

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에있는 "편집"버튼을 클릭

,이 이벤트가 발생합니다 :

은 StartRowEditingEvent입니다. 이 변수는 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

둘 다 가능하다면 서버 코드가 좋을 것입니다! –

답변

관련 문제