无法将Eval从Entity Framework切换到ADO.net

时间:2013-10-27 19:27:40

标签: c# asp.net entity-framework

我正在尝试将Eval应用于一个简单的表(在ASP.NET中)

它适用于Entity Framework,但我想用基本的ADO.NET尝试它,信息表不可用(我只是得到一个黑白屏幕,没有错误信息)

    <asp:Repeater runat="server" ID="Urunler">
        <ItemTemplate>
            <table style="width: 500px;">
                <tr>
                    <td><%#Eval("FirstName") %></td>
                    <td><%#Eval("LastName") %></td>
                    <td><%#Eval("Country") %></td>
                </tr>
            </table>
        </ItemTemplate>
    </asp:Repeater>

这是背后的代码:

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        SqlConnection cnn = new SqlConnection("Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI;");

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                cnn.Open();
                SqlCommand cmd = new SqlCommand("SELECT FirstName,LastName,Country FROM Employees", cnn);
                SqlDataReader dr = cmd.ExecuteReader();

                if (dr.HasRows)
                {
                      while (dr.Read())
                      {
                         Urunler.DataSource = dr.GetString(0);
                         Urunler.DataSource = dr.GetString(1);
                      }
                }
                cnn.Close();

                //this was the EntityFW code which worked;
                //Urunler.DataSource = db.Employees.Select(emp => new
                //{
                //    emp.FirstName,
                //    emp.LastName,
                //    emp.Country
                //}).ToList();
                //Urunler.DataBind();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

EF代码创建一个匿名对象列表。基本的ADO.Net代码什么都不创建,它只是重复地用字符串设置DataSource(这是不可能的)。

您必须使您的ADO.Net代码也创建一个对象列表:

var data = new List<EmployeeDto>();
...
while (dr.Read())
{
     data.Add(new EmployeeDto { 
                                FirstName = dr.GetString(0),
                                LastName = dr.GetString(1),
                                Country = dr.GetString(2)
                              });
}
...
Urunler.DataSource = data;
Urunler.DataBind();

其中EmployeeDto是一个具有三个列出属性的简单类。

答案 1 :(得分:0)

你可以这样做:

dr.Read();                      
Urunler.DataSource = dr;
Urunler.DataBind();
//while (dr.Read())
//{
//    Urunler.DataSource = dr.GetString(0);
//    Urunler.DataSource = dr.GetString(1);
//}