如何通过QueryString过滤绑定到GridView控件的数据?

How to filter the data bound to GridView control by the QueryString?

我是一名新的 ASP.NET Web 表单开发人员,我现在正在努力寻找通过之前的 QueryString 值过滤数据的最佳方法 将其绑定到 GridView 控件。我将 GridView 绑定到 GetData() 方法,我想在基于代码隐藏的 如果有 QueryString,则返回 QueryString 的值。 那么我应该检查 BindGrid() 方法中的 QueryString 还是在 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();
    }

在此先感谢您的帮助。

您没有使用 QueryString 值来筛选列表项。你应该做的是这个

private void bindGrid()
{
    Item itemObj = new Item();
    if(Request.QueryString["ItemId"] != null) 
    {
        itemObj.ItemId = Convert.ToInt32(Request.QueryString["ItemId"]);
    }
    var result = itemObj.getData(itemObj).ToList();
    gvItems.DataSource = itemObj.getData(itemObj);
    gvItems.DataBind();
}