2011-04-10 17 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