基本的な1つのテーブルグリッドがあります。ブランチタイプというフィールドがあります。支店の種類は、法人またはフランチャイズのみです。ASPxgridview行の編集ボタンをクリックすると、ブランチタイプに応じて、編集フォームのフィールドを表示および非表示にします。したがって、企業の場合は、[マネージャー]フィールドを表示し、[所有者]フィールドを非表示にします。ブランチタイプがフランチャイズの場合、編集フォームで[所有者]フィールドを表示し、[マネージャー]フィールドを非表示にします。すべての詳細はグリッドビューに表示できますが、編集フォームでは、ユーザーに該当するフィールドのみに入力するように強制したいと思います。
以下を見ると:
これは基本的に私が編集フォームをロードするときに達成したいことです:
protected void ASPxGridViewStores_CellEditorInitialize(object sender, ASPxGridViewEditorEventArgs e)
{
if (!ASPxGridViewStores.IsEditing || e.Column.FieldName != "StoreOwnershipID") return;
if(e.KeyValue == DBNull.Value || e.KeyValue == null) return;
object val = ASPxGridViewStores.GetRowValuesByKeyValue(e.KeyValue, "S_ID");
if(val == DBNull.Value) return;
int StoreOwnershipID = (Int32)val;
if (StoreOwnershipID == 4)
{ ASPxComboBox ManagerID = (ASPxComboBox)ASPxGridViewStores.FindEditFormTemplateControl("ManagerID");
ManagerID.Enabled = true;
ASPxComboBox ContactID = (ASPxComboBox)ASPxGridViewStores.FindEditFormTemplateControl("ContactID");
ManagerID.Enabled = true;
}
else
{ ASPxComboBox ManagerID = (ASPxComboBox)ASPxGridViewStores.FindEditFormTemplateControl("ManagerID");
ManagerID.Enabled = false;
ASPxComboBox ContactID = (ASPxComboBox)ASPxGridViewStores.FindEditFormTemplateControl("ContactID");
ManagerID.Enabled = false;
}
}
次に、「StoreOwnershipID」フィールドで「Corporate」または「Franchise」を選択することに応じて、クライアント側のスクリプトを使用して、追加のフィールドを有効または無効にします。
私もいくつかの調査を行い、次のコードを思いつきました。
SelectedIndexChanged="function(s, e) {
var value = s.GetValue();
if(value == 4)
GridViewStores.GetEditor("OwnerName").SetVisible(true);
else
GridViewStores.GetEditor("OwnerName").SetVisible(false);
}"
しかし、これが呼び出されると、次のエラーが発生します。
Microsoft JScriptランタイムエラー:「GridViewStores」は未定義です
web.configにHTTPhandlerを追加しました。
<httpModules>
<add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v10.2, Version=10.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" />
</httpModules>
と
<system.webServer>
<modules>
<add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v10.2, Version=10.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" />
</modules>
以下に示すように、ClientInstanceNameを挿入しました。
ClientIDModeをAutoIDからInherit、Static、Predictableに変更しましたが、各シナリオは機能せず、レンダリングされます:Microsoft JScriptランタイムエラー:「ASPxGridview」は未定義です。
gridviewタグの下
<dx:ASPxGridView ID="ASPxGridView" runat="server" AutoGenerateColumns="False"
ClientIDMode="Predictable" DataSourceID="SqlDataSource1" KeyFieldName="S_ID"
ClientInstanceName="ASPxGridView">
私は今、sqldatasourceとgridviewだけで、storetypeフィールドをacomboboxとして、以前の投稿で述べたようにjavascriptを含めて、新しいページを作成しようとしましたが、まったく運がありません。httphandlerを宣言したweb.config設定を提供したので、これを機能させるために他に何を提案しますか?
これが私のwebconfigです:
セクションを使用すると、ASP.NETが着信ユーザーを識別するために使用するセキュリティ認証モードを構成できます。->セクションでは、リクエストの実行中に未処理のエラーが発生した場合の対処方法を設定できます。具体的には、開発者は、エラースタックトレースの代わりに表示されるhtmlエラーページを構成できます。
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
<httpModules>
<add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v10.2, Version=10.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" />
</httpModules>
<httpHandlers>
<add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v10.2, Version=10.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET" path="DX.ashx" validate="false" />
</httpHandlers>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
大変な質問でごめんなさい。ちなみに、これはDevExpressGridviewを使用しています。devexpressの人たちは私を助けてくれず、質問に答えるために1日かかるので、今ではほぼ1週間続いています...
ありがとうウェルナー