无法从数据库中查看CheckBoxList

时间:2011-12-19 19:57:27

标签: c# asp.net checkbox checkboxlist

我有2个页面,一个用于向数据库添加数据,另一个用于编辑它,因此在添加中我有一个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>

我使用SqlDataSource从数据库中获取复选框列表,在页面中我可以看到它们被打开,因为我打印了项目的计数为零

哪里可能是问题??

由于

1 个答案:

答案 0 :(得分:1)

编辑:这篇文章准确描述了您的问题http://forums.asp.net/t/1488957.aspx/1,并提供了两种解决方案

这是我看到的

if(!Page.IsPostBack)

这意味着您在页面的新副本上,因此CheckBoxList1为空,直到您使用数据加载它。我打赌会在你的代码中进一步发生。只需确保在使用之前加载它。

编辑:使用SqlDataSource填充控件时,必须记住引用它的控件绑定后执行Page_Load。上面的链接提供了两种方法(手动调用Control.DataBind或处理Control.Databound事件)。