【问题标题】:Is it possible to do a linq query on a GridView (ASP.NET)?是否可以在 GridView (ASP.NET) 上进行 linq 查询?
【发布时间】:2011-04-11 16:31:53
【问题描述】:

基本上我有一个数据键,我想从我的 GridView 中查询,而不是遍历所有行并比较每一行的键。所以我想知道是否可以只对 gridview(不是数据表)进行 linq 查询并使用 datakey 进行过滤。

【问题讨论】:

  • GridView 数据是否已绑定到集合?
  • 当我进入代码隐藏并尝试提取数据源时,我得到“null”。我最初通过代码隐藏对数据表进行数据绑定。
  • 您能否展示您填充数据源并将其绑定到gridview 的代码?

标签: asp.net linq gridview


【解决方案1】:

不确定如何直接使用 DataKeyNames,因为 Column 没有关于它来自的数据字段名称的任何信息。在下面的示例中,我使用 SortExpression 来获取用于过滤的列索引。

编辑:这里最重要的部分是强制转换,它使您能够使用为 IEnumerable 设计的所有花哨的扩展方法。

int idColumnIndex = MyGrid.Columns.Cast<DataControlField>().Where(e => e.SortExpression == "ID").Select(e => MyGrid.Columns.IndexOf(e)).FirstOrDefault();
var row = MyGrid.Rows.Cast<GridViewRow>().Where(e => e.Cells[idColumnIndex].Text == "421").FirstOrDefault();

一切皆有可能!

【讨论】:

    【解决方案2】:

    Gridview 本身什么都不是。它只是一个 UI,数据在其源中,无论是数据表还是数据集,您都可以使用 linq 来查询它们。

    【讨论】:

    • +1:我什至会说“始终处理数据,而不是呈现。”
    【解决方案3】:

    据我了解 LINQ 的理论,它可以在任何列表上执行。由于 gridview 中的数据源本质上是一个列表,因此您应该能够在 gridview 的该数据源上使用 LINQ。

    试试这个例子:

    http://weblogs.asp.net/scottgu/archive/2006/05/14/Using-LINQ-with-ASP.NET-_2800_Part-1_2900_.aspx

    【讨论】:

      【解决方案4】:

      我用中继器做了类似的事情,也许它会有所帮助......或者如果没有,你可以忽略它。在我的情况下,我对转发器进行了数据绑定,并允许用户在将数据导出到 XML 之前对其进行修改。以下 LINQ 循环遍历转发器中的每一行,使用 findcontrol 从数据行中获取控件,然后使用 Linq to XML,但这可用于使用 LINQ to Objects 生成对象。 rp 是中继器,cbIgnore 是一个复选框,如果用户选中它,则不会导出该行。

          Dim doc As New XDocument( _
              New XDeclaration("1.0", "ISO-8859-1", "true"), _
              New XElement("Schedule_Import", _
                           From c As RepeaterItem In rp.Items _
                           Where (c.ItemType = ListItemType.Item Or c.ItemType = ListItemType.AlternatingItem) _
                           AndAlso DirectCast(c.FindControl("cbIgnore"), HtmlInputCheckBox).Checked = False _
                           Select New XElement("activity", _
                                               New XElement("code", DirectCast(c.FindControl("txtAC"), TextBox).Text), _
                                               New XElement("starttime", DirectCast(c.FindControl("dtfStart"), DateTimeField).SelectedDateTime), _
                                               New XElement("endtime", DirectCast(c.FindControl("dtfEnd"), DateTimeField).SelectedDateTime), _
                                               New XElement("description", DirectCast(c.FindControl("txtTitle"), TextBox).Text))))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-12
        • 1970-01-01
        • 2014-06-09
        • 2010-09-08
        • 1970-01-01
        • 2012-02-22
        • 2011-04-01
        • 1970-01-01
        相关资源
        最近更新 更多