1

devexpress aspxGridview の FocusedRow から KeyField 値を取得しようとしています。

私がこれまでに持っている次のコード

  • グリッドビュー

           <dx:ASPxGridView ID="ClientenSummary" runat="server" Width="700px" 
            OnSelectionChanged="ClientenSummary_SelectionChanged" EnableCallBacks="False">
    
            <ClientSideEvents FocusedRowChanged="function(s, e) 
    

    { OnGridFocusedRowChanged(); }" />

            <SettingsBehavior AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True" ProcessSelectionChangedOnServer="True" />
            <SettingsPager PageSize="50">
            </SettingsPager>
            <Settings ShowFilterRow="True" ShowFilterRowMenu="True" />
        </dx:ASPxGridView>
    
  • ASP ページ マークアップの JavaScript 関数

     <script language="javascript" type="text/javascript">
     function OnGridFocusedRowChanged() {
         ClientenSummary.GetRowValues(ClientenSummary.GetFocusedRowIndex(), 'ClassNR', OnGetRowValues);
     }
    
     function OnGetRowValues(values) {
         window.location = "../main.aspx?FocusedRowKeyField=" + values[0];
     }
    </script>
    
  • クエリ文字列を解決するためのバックエンド C# コード

       protected void Page_Load(object sender, EventArgs e)
       {
        if (!string.IsNullOrEmpty(Request.Params["FocusedRowKeyField"]))
        {
            GetClientDetails(Request.Params["FocusedRowKeyField"]);
        }
    

理解できないのは、なぜ QueryString が解決されないのかということです。インターウェブに関するいくつかの調査の後、適切な解決策が見つからないため、ここで質問しています。誰かが助けてくれることを願っています

4

1 に答える 1

2

AllowFocusedRow="true"まず、グリッドの SettingsBehavior にありません。これにより、FocusRowChanged のクライアント側イベントが無視されます。

次に、フォーカスされた行変更イベントをサーバーまたはクライアントのどちらで処理するかをコントロールに伝える必要があります。クライアントをお勧めします。以下にいくつかのコードを投稿します。(DevExpress ドキュメント: http://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridViewASPxGridView_FocusedRowChangedtopic )

3 番目ProcessSelectionChangedOnServer="True"に、ClientenSummary_SelectionChanged イベントのコードを起動するものがあります。しかし、あなたはこのコードを投稿しませんでした。正直に言うと、これが投稿しなかった特定の機能を提供していない限り、あなたが求めたものには必要ありません。

最後に、グリッドのクライアント インスタンス名とキー フィールド名を設定することをお勧めします。私の Java コード例では、「グリッド」と「ClassNR」を使用しています。

ジャワ:

<script type="text/javascript">
function OnGridFocusedRowChanged() {
    grid.GetRowValues(grid.GetFocusedRowIndex(), 'ClassNR', OnGetRowValues);
}

function OnGetRowValues(ClassNR) {
    window.location.href = "../main.aspx?FocusedRowKeyField=" + ClassNR;
} 

グリッド:

<dx:ASPxGridView ID="grid" ClientInstanceName="grid" runat="server" EnableCallBacks="false" KeyFieldName="ClassNR">

設定:

<SettingsBehavior AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True" ProcessFocusedRowChangedOnServer="false" AllowFocusedRow="true"  />

クライアント側イベント:

<ClientSideEvents FocusedRowChanged="function(s,e) { OnGridFocusedRowChanged(); }" /> 

この次のビットは値をテストするためのもので、好きなように変更してください。C#:

    protected void Page_Load(object sender, EventArgs e)
    {
        Page.ClientScript.RegisterStartupScript(this.GetType(), "myScript", "<script language=JavaScript>alert(" + Request.Params["FocusedRowKeyField"] + ");</script>");  
    }

これは、私があなたの質問のために設定したテスト アプリケーションからのものです。フォーカス行が変更されると、ブラウザーのアドレス ウィンドウ (IE9 でのみテスト済み) が FocusedRowKeyField で更新されます。また、コード ビハインドでスクリプトを呼び出し、値とともにアラートもポップアップします。Page_Load イベントは、フォーカス行が変更されるたびに発生します。必要に応じて変更することをお勧めします。

于 2012-06-14T20:17:23.287 に答える