1

基本的な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週間続いています...

ありがとうウェルナー

4

1 に答える 1

1

Javaスクリプトは、大文字と小文字を区別する言語です。したがって、ClientInstanceNameがASPxGridViewに設定されている場合、コードは次のようになります。

ASPxGridView.GetEditor( "OwnerName")。SetVisible(true);

エラーメッセージに「ASPxGridview;」が含まれていることがわかります。識別子。これは、コードにASPxGridview識別子が含まれていることを意味しますが、(マークアップに基づいて)ASPxGridViewを使用する必要があります。また、私はこのコードが間違っていると信じています:

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;
    }

ManagerIDオブジェクトのEnabledプロパティを2回同じ値に設定しました。これをチェックしてください。追加するものは何もありません。それでも問題が解決しない場合は、サポートセンターのチケットIDをお知らせください。可能であれば、ページのソースコード(csとaspx)とweb.configを添付してください。私たちはあなたを助けようとします。

更新: サポートセンターであなたの質問を見つけて回答しました。お役に立てれば。

于 2011-02-24T17:51:32.517 に答える