我试图学习如何将IEnumerable LINQ集合绑定到转发器

Ian*_*oke 10 c# linq asp.net

我已经使用字符串数组中的LINQ创建了一个IEnumerable的赛车驱动程序列表,如下所示:

string[] driverNames = {
                              "Lewis Hamilton", 
                              "Heikki Kovalainen",
                              "Felipe Massa",
                              "Kimi Raikkonen",
                              "Robert Kubica",
                              "Nick Heidfeld",
                              "Fernando Alonso",
                              "Nelson Piquet Jr",
                              "Jarno Trulli",
                              "Timo Glock",
                              "Sebastien Bourdais",
                              "Sebastien Buemi",
                              "Mark Webber",
                              "Sebastian Vettel",
                              "Nico Rosberg",
                              "Kazuki Nakajima",
                              "Adrian Sutil",
                              "Giancarlo Fisichella",
                              "Jenson Button",
                              "Rubens Barrichello"
                          };

IEnumerable<string> result = from driver in driverNames
                             orderby driver
                             select driver;
Run Code Online (Sandbox Code Playgroud)

我现在只是保持简单.

然后我将它绑定到ASP.NET GridView,如下所示:

GV_CurrentF1Drivers.DataSource = result;
GV_CurrentF1Drivers.DataBind();
Run Code Online (Sandbox Code Playgroud)

这很好用.现在我想获取相同的输出(结果)并将其绑定到转发器,但无论我尝试什么我都无法使转发器工作,我想我错过了一些关于LINQ的关键理解以及它如何与ASP.NET一起工作.

下面是完整的aspx页面,显示我到目前为止所处的位置.请某人(如果可能的话,轻轻地)引导我回到路上?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Example1.aspx.cs" Inherits="Example1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div style="float: left;">
        <asp:GridView ID="GV_CurrentF1Drivers" runat="server" />
    </div>
    <div style="float: left;">
        <asp:Repeater ID="R_CurrentF1Drivers" runat="server">
            <ItemTemplate>
                <%# Eval("driver") %></ItemTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我使用以下代码将结果绑定到Repeater:

R_CurrentF1Drivers.DataSource = result;
R_CurrentF1Drivers.DataBind();
Run Code Online (Sandbox Code Playgroud)

当我尝试使用Repeater运行页面时出现以下错误:

异常详细信息: System.Web.HttpException:DataBinding:'System.String'不包含名为'driver'的属性.

Ori*_*ian 9

你得到了一个没有名字的可枚举的字符串.如果要使用属性名称驱动程序,可以使用匿名类型并说:

var result = from driver in driverNames
             orderby driver
             select new { Driver = driver };
Run Code Online (Sandbox Code Playgroud)

然后进行数据绑定.

我相信你也Eval(".")可以评估对象本身而不是属性.另外,正如下面有多个人所说,你可以使用<%# Container.DataItem %>.


Meh*_*ari 5

更改<%# Eval("driver") %>

<%# Container.DataItem %>
Run Code Online (Sandbox Code Playgroud)