2011-12-19 48 views
0

我有2頁,一個將數據添加到數據庫和其他編輯它,所以在加我有一個CheckBoxList的,我說他們在數據庫中遵循廣東話查看從數據庫中的CheckBoxList

URLS :1,2,3,4,5 和數字值的「鑰匙」從

我用這個代碼

String values = "";   
foreach (ListItem i in CheckBoxList1.Items) 
{ 
     if (CheckBoxList1.Items.Count == 1) 
      values += i.Value; 
     else 
     if (i.Selected) 
     { 
      values += i.Value + ","; 

     } 
} 

,然後加入我的值到數據庫的複選框,並且它工作完美, 現在我的問題是在編輯頁面,作爲第一想從數據庫中顯示爲選中的盒子,我用這個,但它不是在頁面加載工作

protected void Page_Load(object sender, EventArgs e) 
{ 

     if (!Page.IsPostBack) 
     { 
      ... connection to the database .. etc 

      try 
      { 
       con.Open(); 
       rd = cmd.ExecuteReader(); 
       if (rd.Read()) 
       {     
        String values = rd["urls"].ToString();//workes perfect 

        string[] arr = values.Split(',');//works perfect 
        int x = CheckBoxList1.Items.Count;//this will get me a zero 

        foreach (ListItem item in CheckBoxList1.Items)// doesnt enter here 
        { 
         foreach (string s in arr) 
         { 
          if (item.Text == s) 
          { 
           item.Selected = true; 
          } 
         } 
        } 

      .... //exceptions handling 

我的aspx頁面

<asp:CheckBoxList ID="CheckBoxList1" runat="server" DataSourceID="urls_ds" 
         DataTextField="name" DataValueField="id"> 
    </asp:CheckBoxList> 
    <asp:SqlDataSource ID="urls_ds" runat="server" 
     ConnectionString="<%$ ConnectionStrings:testing_cs %>" 
     SelectCommand="SELECT * FROM [tbl_urls]"></asp:SqlDataSource> 

我正在CheckBoxList的代碼從數據庫中使用SqlDataSource,並在頁面上我可以看到他們把我打印的項目的數量爲零

哪裏可能是問題?

感謝

+0

問題似乎是'CheckBoxList1'是*空*(根據其Count屬性返回0的事實)。它的價值應該從哪裏來?請在該頁面上發佈其定義。 – 2011-12-19 20:05:42

+0

感謝您的回覆,正如我所說的,我使用SqlDataSource從數據庫中獲取數據,並且可以在頁面中看到它們。 – Peril 2011-12-19 20:06:55

+0

您發佈的代碼是編輯頁面的Load事件,是否正確?將項目放入「CheckBox1」的代碼在哪裏?因爲這似乎是問題所在。 – 2011-12-19 20:09:34

回答

1

編輯:這篇文章描述了你的問題正是http://forums.asp.net/t/1488957.aspx/1,並提供兩種解決方案

這是我看到

if(!Page.IsPostBack) 

這意味着你在頁面的一個新副本,所以CheckBoxList1是空的,直到你加載數據。我敢打賭,你的代碼會進一步下降。只要確保在使用它之前加載它。

編輯:當使用SqlDataSource來填充控件時,必須記住引用它的控件綁定AFTER Page_Load執行後。上面的鏈接提供了兩種解決方法(手動調用Control.DataBind或處理Control.Databound事件)。

+0

我正在使用SqlDataSource加載數據,我應該在代碼中加載它們,如果我想要加載它們? – Peril 2011-12-19 20:11:21

+0

Page_Load發生在SqlDataSource更新之前,因此數據不在那裏。 – 2011-12-19 20:13:45

+0

感謝您的回答,您能否看到我的aspx代碼? 謝謝 – Peril 2011-12-19 20:16:27