none
Убрать лишние пункты BulletedList RRS feed

  • Вопрос

  • Добрый день !!! BulletedList привязан к базе данных, и для каждой страницы загружает свой список, Но он показывает максимальное число пунктов, то есть если один элемент имеет 10 пунктов, он для всех показывает 10 пунктов, в итоге получаются "пустые маркеры" так как есть элементы которые имеют меньше свойств. Как можно решить эту проблему?
    10 апреля 2012 г. 9:03

Ответы

  • Насколько я понял у Вас в столбцах есть пустые значения, и при генерации списка они заменяются пустой строкой и выводятся при рендеринге. А  код указанный мной высше удаляет эти элементы из коллекции, поэтому они не рендерятся больше. А правильно ли подсоединяете обработчик к элементу и не находится ли он внутри какого нибудь шаблона. Поставьте точку прерывания и посмотрите срабатывает ли оьработчик события? А то код рабочий уже протестил.

    • Изменено YatajgaEditor 11 апреля 2012 г. 8:32
    • Помечено в качестве ответа Program-s.g 11 апреля 2012 г. 10:41
    11 апреля 2012 г. 8:31
    Модератор

Все ответы

  • А элементы списка созданы вручную или генерируются?
    10 апреля 2012 г. 9:15
    Модератор
  • Нет, генерируются, в зависимости от содержания страницы

    10 апреля 2012 г. 10:33
  • Тогда вопрос не очень понятен, немножечко подробней если можно.
    10 апреля 2012 г. 10:43
    Модератор
  • Вот код,
    <asp:BulletedList ID="BulletedList1" runat="server" 
            DataSourceID="SqlDataSource2" DataTextField='<%#Eval("name") %>' 
            DataValueField='<%#Eval("name") %>' >
        </asp:BulletedList>

    BulletedList находится в listview
    10 апреля 2012 г. 11:15
  • А для каждой страницы  источник задан разный, или у всех одинаковый. Т.е. запрос меняется для каждой страницы?
    10 апреля 2012 г. 11:27
    Модератор
  • Вы имеете в виду sql запрос?

    10 апреля 2012 г. 11:50
  • Из того как вопрос сформулирован ничего не понятно, но я почти интуитивно предполагаю, что 

    у вас запрос возвращает фиксированный набор записей (картежей), часть из которых в зависимости от страницы (параметров запроса) имеют

    пустые (не определенные значения).

    Решений два:

    1. Напишите запрос понормальному. 

    2. JavaScript-ом удалите пустые элементы после загрузки страницы (но с этим способом "есть нюансы" (с) - лучше отключать

    ViewStat у контролов, содержимое которых может переписываться скриптом на стороне клиента). 


    • Изменено A.G.Sedov 10 апреля 2012 г. 12:32
    10 апреля 2012 г. 12:24
  • "Вы имеете в виду sql запрос?" да именно так. Данные для каждой страницы разные или же одно и тоже выводится?
    10 апреля 2012 г. 12:52
    Модератор
  • Из того как вопрос сформулирован ничего не понятно, но я почти интуитивно предполагаю, что 

    у вас запрос возвращает фиксированный набор записей (картежей), часть из которых в зависимости от страницы (параметров запроса) имеют

    пустые (не определенные значения).

    Решений два:

    1. Напишите запрос понормальному. 


    Что значит "напишите запрос по нормальному"? у меня такой запрос

    SELECT * FROM [table]

    10 апреля 2012 г. 12:54
  • Что значит "напишите запрос по нормальному"? у меня такой запрос -

    SELECT * FROM [table]

    тут вы выбираете все данные из таблицы, а если хотите часть, то должны выполнять запрос в зависимости от условий отображения этих данных

    SELECT * FROM [table] Where "условия"

    10 апреля 2012 г. 12:58
    Модератор
  • Это понятно, что для фильтрации данных нужно использовать Where, но я же выбираю столбцы для отображения, как тут можно использовать Where?

    вот скрин примера таблицы и скрин из браузера

     

    11 апреля 2012 г. 5:50
  • И на данной страницы нужно вывести только стобце A? или нужны все столбцы?


    Для связи [mail]

    11 апреля 2012 г. 6:13
    Модератор
  • Для каждой страницы свой столбик в зависомости от DataTextField='<%#Eval("name") %>'
    11 апреля 2012 г. 6:19
  • Можно подписаться на событие привязки и сделать так.

    protected void BulletedList1_DataBound(object sender, EventArgs e)
        {
          BulletedList bull = (BulletedList)sender;
          for (int i = 0; i <= bull.Items.Count;i++ )
          {
            if (bull.Items[i].Text == "" || bull.Items[i].Value==null)
            {
              bull.Items.Remove(bull.Items[i]);
            }
          }
            
        }


    11 апреля 2012 г. 6:46
    Модератор
  • Сделайте так, в предыдущем ответе просчёт у меня.

    protected void BulletedList1_DataBound(object sender, EventArgs e)
        {
          BulletedList bull = (BulletedList)sender;
          var temp = bull.Items.Cast<ListItem>().Where(i => i.Text == "").ToArray();
          foreach (ListItem i in temp)
          {
            bull.Items.Remove(i);
          }
            
        }

    11 апреля 2012 г. 6:58
    Модератор
  • Не помогает, пустые значения остаются.

    11 апреля 2012 г. 7:34
  • Насколько я понял у Вас в столбцах есть пустые значения, и при генерации списка они заменяются пустой строкой и выводятся при рендеринге. А  код указанный мной высше удаляет эти элементы из коллекции, поэтому они не рендерятся больше. А правильно ли подсоединяете обработчик к элементу и не находится ли он внутри какого нибудь шаблона. Поставьте точку прерывания и посмотрите срабатывает ли оьработчик события? А то код рабочий уже протестил.

    • Изменено YatajgaEditor 11 апреля 2012 г. 8:32
    • Помечено в качестве ответа Program-s.g 11 апреля 2012 г. 10:41
    11 апреля 2012 г. 8:31
    Модератор
  • Все получилось, просто я не правильно "перевел" код C#,

    Большое спсибо!!!

    11 апреля 2012 г. 10:41