Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在GridView(ASP.NET)上执行linq查询?_Asp.net_Linq_Gridview - Fatal编程技术网

是否可以在GridView(ASP.NET)上执行linq查询?

是否可以在GridView(ASP.NET)上执行linq查询?,asp.net,linq,gridview,Asp.net,Linq,Gridview,基本上,我有一个数据键,我想从我的GridView查询它,而不是遍历所有行并比较每行的键。所以我想知道是否可以在gridview(不是datatable)上执行linq查询并使用datakey进行过滤。gridview本身什么都不是。它只是一个用户界面,数据在它的源代码中,无论是数据表还是数据集,您都可以使用linq来查询它们。就我对linq理论的理解而言,它可以在任何列表上执行。由于gridview中的数据源本质上是一个列表,所以您应该能够在gridview的数据源上使用LINQ 试试这个例子

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

gridview本身什么都不是。它只是一个用户界面,数据在它的源代码中,无论是数据表还是数据集,您都可以使用linq来查询它们。

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

试试这个例子:


我用中继器做了类似的事情,也许这会有帮助。。。如果没有,你也可以忽略它。在我的情况下,我对中继器进行了数据绑定,并允许用户在将数据导出到XML之前修改数据。下面的LINQ循环遍历中继器中的每一行,使用findcontrol从datarow获取控件,然后使用LINQtoXML,但这可以用于使用LINQtoObjects生成对象。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))))

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

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

int-idColumnIndex=MyGrid.Columns.Cast()。其中(e=>e.SortExpression==“ID”)。选择(e=>MyGrid.Columns.IndexOf(e)).FirstOrDefault();
var row=MyGrid.Rows.Cast().Where(e=>e.Cells[idColumnIndex].Text==“421”).FirstOrDefault();

一切皆有可能

GridView数据绑定到集合了吗?当我深入到后面的代码并尝试提取数据源时,我得到“null”。我最初是通过代码隐藏对数据表进行数据绑定的。您能展示一下填充数据源并将其绑定到gridview的代码吗?+1:我甚至会说“始终处理数据,而不是它的表示。”
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();