0

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

它适用于实体框架,但我想用基本的 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();
            }
        }
    }
}
4

2 回答 2

1

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

你必须让你的 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是一个具有三个列出的属性的简单类。

于 2013-10-28T13:35:34.320 回答
0

你可以这样做:

dr.Read();                      
Urunler.DataSource = dr;
Urunler.DataBind();
//while (dr.Read())
//{
//    Urunler.DataSource = dr.GetString(0);
//    Urunler.DataSource = dr.GetString(1);
//}
于 2013-10-27T19:57:57.207 回答