2011-12-19 46 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