我有一个asp页面,我使用gridview来显示一些东西。我将网格视图绑定到数据库中的表。问题是我想根据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 :(得分:0)
这对我有用。我删除了OnSelecting事件并将其添加到我的Page_Load。
if (!IsPostBack)
{
Parameter p = new Parameter("ID", DbType.Int32, ID.ToString());
this.AssetsDataSource.WhereParameters.Add(p);
}