我正在尝试将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();
}
}
}
}
答案 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);
//}