【问题标题】:How to filter the data bound to GridView control by the QueryString?如何过滤QueryString绑定到GridView控件的数据?
【发布时间】: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


【解决方案1】:

您没有使用 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();
}

【讨论】:

  • 如果我有多个具有相同 id 的商品怎么办?会有所不同吗?如果是,您能否也将此案例添加到您的解决方案中。非常感谢您在这方面的帮助,非常感谢您。
  • 如果您有多个具有相同 id 的项目,解决方案不会有所不同。同样的逻辑会起作用。我希望这能回答您的问题。
  • 如果你也能告诉我这个案例的答案,我将不胜感激。
  • 我不明白。我是说即使您有多个具有相同 id 的项目,相同的代码也可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多