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" />
당신은 당신의 코드를하시기 바랍니다 게시 할 수 있습니다! –
@surajsingh 마크 업 또는 서버 코드를 보시겠습니까? – ernest
둘 다 가능하다면 서버 코드가 좋을 것입니다! –