2011-08-31 32 views
0

以下代碼僅顯示數據庫中的最後一條記錄。如何顯示所有記錄?在ASP.NET中重複使用

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Text; 
using System.Collections; 
using System.Data.Odbc; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=localhost;" + "DATABASE=softmail;" + "UID=root;" + "PASSWORD=********;" + "OPTION=3"; 
     OdbcConnection MyConnection = new OdbcConnection(MyConString); 

     MyConnection.Open(); 
     OdbcCommand cmd = new OdbcCommand("Select name, email, website, comments from awm_comments", MyConnection); 
     OdbcDataReader dr = cmd.ExecuteReader(); 
     if (dr.HasRows == false) 
     { 
      throw new Exception(); 
     } 
     while (dr.Read()) 
     { 
      if (!IsPostBack) 
      { 
       string a = dr[0].ToString(); 
       string b = dr[1].ToString(); 
       string c = dr[2].ToString(); 
       string d = dr[3].ToString(); 
       ArrayList values = new ArrayList(); 
       values.Add(new PositionData(a, b, c, d)); 

       Repeater1.DataSource = values; 
       Repeater1.DataBind(); 

       Repeater2.DataSource = values; 
       Repeater2.DataBind(); 
      } 
     } 
    } 
    public class PositionData 
    { 
     private string name; 
     private string ticker; 
     private string val3; 
     private string val4; 

     public PositionData(string name, string ticker, string val3, string val4) 
     { 
      this.name = name; 
      this.ticker = ticker; 
      this.val3 = val3; 
      this.val4 = val4; 
     } 

     public string Name 
     { 
      get 
      { 
       return name; 
      } 
     } 

     public string Ticker 
     { 
      get 
      { 
       return ticker; 
      } 
     } 
     public string Val3 
     { 
      get 
      { 
       return val3; 
      } 
     } 
     public string Val4 
     { 
      get 
      { 
       return val4; 
      } 
     } 
    } 
} 

回答

1

在您創建每個記錄的新ArrayList的時刻;然後,您將該新列表綁定到中繼器並覆蓋之前的綁定。

相反,你需要將所有的值添加到列表中,並只能綁定一次您已經閱讀您的所有數據 - 你的循環之前將你的變量聲明,你的循環後,您DataBind調用,就像這樣:

ArrayList values = new ArrayList(); 
    while (dr.Read()) 
    { 
     if (!IsPostBack) 
     { 
      string a = dr[0].ToString(); 
      string b = dr[1].ToString(); 
      string c = dr[2].ToString(); 
      string d = dr[3].ToString(); 
      values.Add(new PositionData(a, b, c, d)); 
     } 
    } 

    Repeater1.DataSource = values; 
    Repeater1.DataBind(); 

    Repeater2.DataSource = values; 
    Repeater2.DataBind(); 
0

您經常重置該中繼器的值。

你應該做的是首先將所有記錄收集到一個ArrayList中,並且只有在完成後才執行一個DataBind();

喜歡的東西:

if (!IsPostBack) 
    { 
     ArrayList values = new ArrayList(); 
     while (dr.Read()) 
     { 
      string a = dr[0].ToString(); 
      string b = dr[1].ToString(); 
      string c = dr[2].ToString(); 
      string d = dr[3].ToString(); 
      values.Add(new PositionData(a, b, c, d)); 
     } 

     Repeater1.DataSource = values; 
     Repeater1.DataBind(); 

     Repeater2.DataSource = values; 
     Repeater2.DataBind(); 
    }