2012-06-12 35 views
0

我正在開發一個使用C#,.net 4的Web應用程序。我有一個網格視圖綁定到一個SqlDataSource。這個數據源有大約一個以上的crore記錄。這是因爲我允許分頁。我在同一頁面上有一個過濾條件。用戶使用複選框選擇選項。然後在過濾器Button的事件中,我編寫了一些代碼,根據SqlDataSource的過濾器選項構建新的SELECT命令。並且在建立一個新的查詢之後。我寫了另一行代碼,它是:網格視圖綁定到SqlDataSource創建分頁問題

DataGridView.SelectCommand = FilteredQuery;

所以當用戶點擊FilterButton時,gridview會顯示過濾的數據。正如我告訴你的,我允許Paging。所以在過濾之後,當我選擇該gridview的下一個按鈕時,它將顯示整個數據而不是過濾的數據。我認爲這是因爲它回發頁面並根據SqlDataSource的預定義SELECT命令綁定gridview。

我嘗試了很多方法。我使用靜態布爾變量來跟蹤page_load事件。它工作得很好。但是當我從一個頁面瀏覽到另一個頁面時,它仍然存在麻煩。當我回到這個頁面時,它仍然顯示過濾的數據。

我的時間很少。請儘快指導我。請記住,我對點網技術完全陌生。所以任何詳細的指導將高度讚賞。謝謝。

最好的問候!

回答

0

你必須

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

而在代碼中創建OnPageIndex Changed事件背後

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

我試過這個以及..但它沒有幫助。可能是我的邏輯錯了。讓我分享我的代碼並檢查是否可以修復它。這裏是: 我可以在哪裏與我分享我的代碼? 我可以讓你的電子郵件地址? –

+0

非常感謝你的朋友.. :) 我完成了它..我使用了Page_Unload方法.. 當用戶導航到其他頁面..我的FLAG變量設置爲false .. 如果它的false..my頁面顯示完整的數據..只有當用戶點擊過濾器問題時纔會出現此錯誤。 –

0

的SqlDataSource不會以這種方式工作。在每一個頁面的變化,你需要重新創建你的SQL查詢。嘗試跳過每個頁面更改中的某些行。

下面是一個例子給你。

FOR PAGE - 1

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

FOR EXAMPLE

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

FOR PAGE - 2

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

對於PAGE - 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查詢,如實例之上。