Не могу просмотреть CheckBoxList из базы данных

У меня есть 2 страницы: одна для добавления данных в базу данных, а другая для ее редактирования, поэтому при добавлении у меня есть CheckBoxList, я добавил их в базу данных, как показано ниже.

URL-адреса: 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 , и на странице я вижу, как они помещаются, когда я печатаю количество элементов, равное нулю

где может быть проблема??

Спасибо


person Peril    schedule 19.12.2011    source источник
comment
Проблема заключается в том, что CheckBoxList1 пусто (из-за того, что его свойство Count возвращает 0). Откуда берутся его ценности? Разместите его определение на этой странице.   -  person Dan J    schedule 20.12.2011
comment
спасибо за ответ, как я уже сказал, я получаю данные из базы данных с помощью SqlDataSource, и я вижу их на странице   -  person Peril    schedule 20.12.2011
comment
Код, который вы разместили, предназначен для события загрузки страницы редактирования, верно? Где код, который помещает элементы в CheckBox1? Потому что кажется, что проблема именно в этом.   -  person Dan J    schedule 20.12.2011
comment
Я обновил вопрос, пожалуйста, проверьте его, спасибо   -  person Peril    schedule 20.12.2011


Ответы (1)


Изменить: этот пост точно описывает вашу проблему http://forums.asp.net/t/1488957.aspx/1 и предлагает два решения

Вот что я вижу

if(!Page.IsPostBack)

Это означает, что вы находитесь на НОВОЙ копии страницы, поэтому CheckBoxList1 пуст, пока вы не загрузите его данными. что, я уверен, происходит дальше в вашем коде. Просто убедитесь, что вы загрузили его, прежде чем использовать его.

Изменить: при использовании SqlDataSource для заполнения элементов управления вы должны помнить, что элементы управления, ссылающиеся на него, связываются ПОСЛЕ выполнения Page_Load. Приведенная выше ссылка дает два обходных метода (либо вручную вызывая Control.DataBind, либо обрабатывая событие Control.Databound).

person Malcolm O'Hare    schedule 19.12.2011
comment
Я загружаю данные с помощью SqlDataSource, где я должен загрузить их в коде, если я хочу это сделать? - person Peril; 20.12.2011
comment
Page_Load происходит до того, как SqlDataSource выполняет свое обновление, поэтому данных там нет. - person Malcolm O'Hare; 20.12.2011
comment
спасибо за ваш ответ, не могли бы вы увидеть мой код для aspx? Спасибо - person Peril; 20.12.2011
comment
большое спасибо, это сработало, я использовал это DropDownList1.DataBind(); при загрузке страницы - person Peril; 20.12.2011