2011-04-08 103 views
0

我有一個asp頁面,我正在使用gridview來顯示一些東西。我有綁定到數據庫中的表格的網格視圖。問題是我想根據where子句過濾我顯示的內容。GridView where where條款

<asp:LinqDataSource ID="ItemsDataSource" runat="server" ContextTypeName="Database.MyDataContext" TableName="ItemDetails" OnSelecting="ItemSourceSelecting" Where="ID == @ID" > 

那麼這裏就是我的ItemSourceSelecting

protected void ItemSourceSelecting(object sender, LinqDataSourceSelectEventArgs e) 
{ 
    if (!IsPostBack) 
     e.WhereParameters.Add("ID", ID); 
} 

在頁面加載時,我第一次去它這個偉大的工程。問題是我只在GridView中顯示10個項目,然後在底部顯示頁碼。當我嘗試查看另一個頁面時,它將數據庫中的所有內容都帶回來,並且不會調用ItemSourceSelecting。是否有另一個地方或方式我應該這樣做,所以這不會發生?

編輯: 當我在LinqDataSource標記中硬編碼Where =「ID == 1」時,它工作正常。它似乎應該在更改頁面時調用ItemSourceSelecting,但它不是。不知何故,當頁面被改變時,where子句將被拋棄。

+0

是否有任何方法可以像控制一樣將變量添加到中? – thecaptain0220 2011-04-08 19:32:11

回答

0

這是我工作的。我刪除了OnSelecting事件並將其添加到我的Page_Load中。

if (!IsPostBack) 
{ 
    Parameter p = new Parameter("ID", DbType.Int32, ID.ToString()); 
    this.AssetsDataSource.WhereParameters.Add(p); 
} 
+0

這並非完全正確。後來我發現我依賴於一個ViewState變量在代碼中的某處被清除,導致where子句有錯誤的參數。 – thecaptain0220 2011-04-11 20:02:49