2011-04-08 97 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