2011-04-10 46 views
1

我有一个中继器定义为ASP.net中继器未结合值

<asp:Repeater id="rep1" runat="server"> 
<ItemTemplate> 
<%#Eval("name")%> 
</ItemTemplate> 
</asp:Repeater> 

代码后面是

try 
     { 
      SqlConnection xconn = new SqlConnection(); 
      xconn.ConnectionString = @"Data Source=XXXXXX;Trusted_Connection=yes;database=master"; 
      xconn.Open(); 
      lbl1.Text = "Connected to SQL"; 
      SqlCommand ycmd = new SqlCommand("select * from student",xconn); 
      SqlDataReader dr = ycmd.ExecuteReader(); 
      cdcatalog.DataSource = dr; 
      cdcatalog.DataBind(); 
     } 
     catch (Exception) 
     { 
      lbl1.Text= "Cannot connect to SQL"; 
     } 

为什么它不结合在中继器中的数据?

回答

3

为什么要将数据读取器绑定到中继器?我会建议你使用强类型的对象。因此,通过定义一个模型,代表你的数据开始:

public class Student 
{ 
    public string Name { get; set; } 
} 

随后的方法来获取这些学生:

public IEnumerable<Student> GetStudents() 
{ 
    using (var conn = new SqlConnection("Data Source=XXXXXX;Trusted_Connection=yes;database=master")) 
    using (var cmd = conn.CreateCommand()) 
    { 
     conn.Open(); 
     cmd.CommandText = "SELECT Name FROM Students;"; 
     using (var reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       yield return new Student 
       { 
        Name = reader.GetString(reader.GetOrdinal("Name")); 
       } 
      } 
     } 
    } 
} 

,然后绑定中继器:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     rep1.DataSource = GetStudents().ToArray(); 
     rep1.DataBind(); 
    } 
} 

,并在查看:

<asp:Repeater id="rep1" runat="server"> 
    <ItemTemplate> 
     <%# Eval("Name") %> 
    </ItemTemplate> 
</asp:Repeater> 

还要注意,中继器的名称是rep1,所以这就是你应该在你的代码中使用的东西。

0

您的中继器的ID是rep1,而您是数据绑定cdcatalog。我想你的问题在那里。这是什么cdcatalog