1

"edit"ボタンが my でクリックされるとASPxGridViewStartRowEditing イベントが発生します。これが発生したら、というローカル変数を設定して、 CellEditorIntialize"IsEditing"が起動したときに自分のデータソースを設定できるようにします。ユーザーがキャンセルを押すと、そのイベントが再び発生し、利用できないため、null 参照の問題が発生するため、これを行います。comboboxesCellEditorInitializecombobox

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

4

1 に答える 1