【发布时间】:2015-03-30 05:07:03
【问题描述】:
我是一名新的 ASP.NET Web 窗体开发人员,我现在正在努力寻找通过之前 QueryString 的值过滤数据的最佳方法 将其绑定到 GridView 控件。我将 GridView 绑定到 GetData() 方法,我想过滤基于代码隐藏的数据 如果存在 QueryString,则在 QueryString 的值上。 那么我应该在 BindGrid() 方法还是在 Page_Load() 方法?我该怎么做?
供您参考,GridView 具有分页功能,如下面的代码隐藏所示。
这是 GetData() 的 C# 代码:
public IEnumerable<Item> getData(Item itemObj)
{
List<Item> itemList = new List<Item>();
using (ATMSEntities context = new ATMSEntities())
{
itemList = (from item in context.Item
select new Item()
{
ItemId = item.ItemId,
Name = item.Name,
}).ToList();
if (itemObj.ItemId != 0)
{
itemList = itemList.Where(item => item.ItemId == itemObj.ItemId).ToList();
}
}
}
return itemList;
}
这是具有 GridView 控件的 aspx 页面的代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
if(Request.QueryString["ItemId"] != null) //the filtration is not working here.
{
bindGrid();
}
}
private void bindGrid()
{
Item itemObj = new Item();
var result = itemObj.getData(itemObj).ToList();
gvItems.DataSource = itemObj.getData(itemObj);
gvItems.DataBind();
}
protected void gvItems_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvItems.PageIndex = e.NewPageIndex;
bindGrid();
}
提前感谢您的帮助。
【问题讨论】:
-
在您的模型中,您可以有多个具有相同 ItemId 的项目吗?
-
@PraveenPaulose,不,不可能。每个项目都有一个唯一的 id。但是,此页面可以在没有查询字符串的情况下访问,因此在这种情况下将显示所有项目。有时它可能可以通过查询字符串访问,因此 gridview 中的数据应该由这个 ItemId 过滤。
标签: c# asp.net linq-to-entities asp.net-controls