0

C#、. net4を使用してWebアプリを開発しています。SqlDataSourceにバインドされたグリッドビューがあります。このデータソースには、約1つ以上のレコードがあります。これは、ページングを許可したためです。同じページにフィルター基準があります。ユーザーはチェックボックスを使用してオプションを選択します。次に、filter Buttonのイベントで、SqlDataSourceのフィルターオプションに従って新しいSELECTコマンドを作成するコードを記述しました。そして、新しいクエリを作成した後。私は次のような別のコード行を書きました。

DataGridView.SelectCommand = FilteredQuery;

したがって、ユーザーがFilterButtonをクリックすると、グリッドビューにフィルター処理されたデータが表示されます。私があなたに言ったように、私はページングを許可しました。したがって、フィルタリング後、そのグリッドビューの次のボタンを選択すると、フィルタリングされたものではなく、データ全体が表示されます。これは、ページをポストバックし、SqlDataSourceの事前定義されたSELECTコマンドに従ってグリッドビューをバインドするためだと思います。

私は多くのアプローチを試みました。静的bool変数を使用して、page_loadイベントを追跡しました。その場合は正常に動作します。しかし、あるページから別のページに移動するときは、それでも問題が発生します。このページに戻ると、フィルタリングされたデータが表示されます。

時間がとても少ないです。できるだけ早く案内してください。覚えておいてください、私はドットネットテクノロジーにまったく慣れていません。したがって、詳細なガイダンスは高く評価されます。ありがとう。

よろしくお願いします!

4

2 に答える 2

0

OnPageIndex Changed イベントを作成する必要があります

<asp:GridView ID="yourGrid" runat="server" AutoGenerateColumns="false" OnPageIndexChanged="yourGrid_PageIndexChanged">

そしてコードビハインドで

protected void yourGrid_PageIndexChanged(object sender, EventArgs e)
{
    if (filtered) // you would have to keep track of the filtered state of your grid possibly with hidden field
    {
        DataGridView.SelectCommand = FilteredQuery;
    }
}
于 2012-06-12T00:24:59.547 に答える
0

SQLDATASOURCE はこの方法では機能しません。ページを変更するたびに、SQL クエリを再作成する必要があります。ページを変更するたびに特定の行をスキップしてみてください。

これがあなたのための例です。

ページ - 1

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY YOURKEY desc) AS rownumber,
    *
  FROM YOURTABLE
) AS ANYTHING
WHERE rownumber >= STARTING ROW and rownumber <= ENDINGROW

例えば

 SELECT * FROM (
      SELECT
        ROW_NUMBER() OVER (ORDER BY bowzer_id desc) AS rownumber,
        *
      FROM Bowzer
    ) AS BowzerTable
    WHERE rownumber >= 10 and rownumber <= 20

ページ - 2

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY bowzer_id desc) AS rownumber,
    *
  FROM Bowzer
) AS BowzerTable
WHERE rownumber >= 20 and rownumber <= 30

ページの場合 - 3

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY bowzer_id desc) AS rownumber,
    *
  FROM Bowzer
) AS BowzerTable
WHERE rownumber >= 30 and rownumber <= 40

上記の例に示すように、ページが変更されるたびに SQL クエリを再作成する必要があります。

于 2012-06-12T04:49:40.083 に答える