2013-12-05 4 views
1

В shownotice.aspx имеет контроль Repeater, чтобы показать уведомление, загруженное из базы данных (сервер SQL 2008) и DropDownList управления для фильтрации: all notices (значение по умолчанию = 0) /lecturer's notices (значение = 1) / student notices (значение = 2).Ошибка с DropDownList управления страницы

<asp:DropDownList ID="DropDownList" runat="server" OnSelectedIndexChanged="DropDownlist_Changed" 
      AutoPostBack="true" > 
       <asp:ListItem Selected="True" Value="0"> All notice </asp:ListItem> 
       <asp:ListItem Value="1"> Lecturer </asp:ListItem> 
        <asp:ListItem Value="2"> Student </asp:ListItem> 
      </asp:DropDownList> 

УВЕДОМЛЕНИЕ таблица в базе данных

NOTICE(id, title, content,object) 

объект = 1 -> Уведомление для лектора

объект = 2 -> уведомления для студента.

Пожалуйста, обратите внимание на мой код ниже:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     bool check = BindRepeater(madoituong, maloai); 
     if (check == false) 
      LabelError.Text = "There is no notice."; 
    } 
} 

private bool BindRepeater() 
{ 
    string sql = ""; 
    string key = DropDownList.SelectedValue; 
    if (key == "0") 
     sql = "select * from NOTICE"; 
    else 
     sql = "select * from NOTICE where object=" + key; 

    DataTable tb = EXECUTEQUERYSQL(sql); 
    if (tb.Rows.Count > 0) 
     { 

     Repeater1.DataSource = tb; 
     Repeater1.DataBind(); 
     return true; 

     } 
    else 
     return false; 
} 

public void DropDownlist_Changed(Object sender, EventArgs e) 
{ 
    bool check = BindRepeater(); 
    if (check == false) 
     LabelError.Text = "There is no notice."; 
} 

Все, что я хочу это:

  • , когда клиент обращается к shownotice страница -> ключ = 0 -> Repeater загружает все уведомления в Таблица уведомлений (как для преподавателя, так и для учащегося)

  • Затем клиент выбирает Lecturer или Student для фильтрации и вытеснения ay уведомляет об объекте.

Когда я построил эту страницу, программа работала нормально, если у него есть какие-то указания для преподавателя (объект = 1) и некоторые уведомления для студента (объект = 2) в базе данных.

Но когда у него есть только уведомления для лектора или только уведомления для ученика -> программа работала неправильно.

Например:

Существует только одна запись в УВЕДОМЛЕНИЕ таблице:

ID = 1, заголовок = ааа, содержание = праздник, объект = 1

Когда я выбираю преподаватель или Студент -> он всегда показывает уведомление aaa, он должен показывать messsage «Нет уведомления», когда я выбираю Student.

Попробуйте отладить:

Когда я выбираю Student вариант: Datatable tb = null и вернуться false, программа перехода в if заявления и линии хит: LabelError =; "Там нет никакого уведомления." Но после завершения отладки Repeater все еще показывает уведомление aaa вместо сообщения.

Помощь !!! Я действительно не знаю, почему, когда я отлаживаю, программа попала в строку LabelError = «Нет уведомлений»; но тогда не появляется сообщение LabelError. Помогите!!!

+0

Где мой метод привязки –

+0

@SurajSingh Я пропустил эти высказывания при копировании и вставке, я только что обновил свой вопрос –

ответ

1
DataTable tb = EXECUTEQUERYSQL(sql); 
     Repeater1.DataSource = tb; 
     Repeater1.DataBind(); 
     return true; 

    if (tb.Rows.Count > 0) 
     { 
      return true;  
     } 
    else 
     return false; 

Смотрите здесь являются обязательными для вашего Repeater только в том случае, когда RowCount> 0, поэтому, если ваше количество строк равно 0, то ваш ретранслятор не получает обновления и он показывает предыдущих значений, Вы должны связать свой Repeater снова обновите его значение, но когда в таблице нет значений, а ваш RowCount равен нулю, ваше условие if не позволяет повторителю снова связываться.

+0

Но он все еще отлично работает, когда он имеет уведомления для студентов и лекций (некоторые для студентов, некоторые для лектора) , ретранслятор получает уведомление об обновлении и отображении для каждого объекта Он работает только неправильно, когда есть только один вид уведомления (только уведомление для учащегося или только для лектора) –

+0

@VyClarks Да причина в то время выполняется 'if (tb .Rows.Count> 0) ', и это приводит к тому, что ваш повторитель снова связывается, получая обновленные значения. Просто удалите это условие 'if (tb.Rows.Count> 0)' он будет работать, но позвольте мне проверить, есть ли какой-либо другой сложный способ, а затем удалить условие 'if', однако ваша проблема в том, что только –

+0

О, дорогой, спасибо, Я понял ваш ответ, я удаляю (tb.Rows.Count> 0), и он работает отлично. Но я хочу показать сообщение: нет никакого уведомления. Как я могу это сделать без утверждения ??? Надеюсь, вы можете дать мне совет –

Смежные вопросы