1

ページングが有効になっている gridview コントロールがあり、datakey 値があり、datakey 値に関する行インデックスを見つけたい、このコードがある、

protected int GetRowIndex(object userID)
{
  for(int i = 0l i <= GridView1.DataKey.Count -1 ; i++)
  {
    if(GridView1.DataKey[i].Value == userID)
    {
       return i;
    }   

  }

}

しかし、このコードには問題があります。そのユーザー ID がそのページに見つからない場合は 0 が返されます。私の質問は、ページ インデックスを変更してすべてのページで行を検索するにはどうすればよいかということです。グリッドビュー独自のページングを使用しています。

4

4 に答える 4

2

GridView には、検索用にすべての DataKey がどこかに保存されているわけではないため、これに対する直接的なサポートはありません。現在のページに使用する DataKeys のセットのみを保持します。ページ インデックスを変更しても、そのページの DataKey が自動的に「読み込まれる」わけではないので、それぞれを検索できます。

これを解決するには、userID を指定すると、表示するページを返す関数を追加する必要があります。これは、GetPageFromUserID (object userID) という名前になる場合があります。この関数は、グリッドと同じ並べ替え順序、ページ サイズ、およびフィルター条件を使用して、データ ストアを検索する必要があります。

GridView.PageIndex プロパティに設定するそのページ インデックスを使用しても、データベースから行 (および DataKeys) をロードするために、GridView で DataBind() を呼び出す必要があります。上記のコードを使用して行インデックスを見つけることができます。

于 2012-06-20T21:52:57.403 に答える
-1
string user_id = GridView1.SelectedDataKey["userID"].ToString();

ここでは、グリッドビューで選択したデータのユーザー ID を取得します

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
          DataKeyNames="userID" OnRowDataBound="GridView1_RowDataBound"
                OnSelectedIndexChanged="GridView1_SelectedIndexChanged" >

   <asp:CommandField ShowSelectButton="True"> </asp:CommandField>

    // write code

  </asp:GridView>

Gridviewでページネーションの概念を実行している場合、バックエンド自体で行う方がよいため、データを簡単に表示できます。つまり、最初のページをクリックしている間、一度に10個のデータを取得します..リピーターで行ったのと同じ概念gridviewと比較すると簡単です...

于 2012-06-21T06:24:14.660 に答える