VBNet.Su - Visual Basic .NET. ASP .NET. Framework .NET.
Список форумов
Web Forms (ASP .NET)

DropDown в гриде.. Есть вопросы.

Быстрый переход:
Web Forms (ASP .NET) / Visual Basic .NET 2005 (Framework 2.0) (ссылка)23 декабря 2008 / 14:53
kibernetics
Пользователь
ку 16.0390645+

вопросов: 6
советов: 0
ответов: 2
комментариев: 17


Нужно сделать в хеадере грида дропдаунлист. Чтобы при выборе значения автоматом фильтровался сам грид.
Вопросы:
1. Как бы это лучше собрать значения всех дропдаунов для формирования условия (...WHERE Field1 = ddl1, Field2 = ddl2... и т.д.)
2. Более важный вопрос. Значения может быть кое-как соберу, но вся беда в том, что при обновлении грида (после databindinga, страница перегружается) в дропдаунах нет того значения по которому я отфильтровывал грид. Как их оставить, чтоб были в том состоянии как я их выбрал?
3. В дропдаун данные биндятся из таблицы. Но нужно вставить также и одно поле пустое (типа, сброс по фильтру - ничего не выбрано). Это лучше программно добавить в ддл один айтем? И потом проверять, а не пустая ли строка в ддл выбрана... Или есть другой вариант?

..и было сказано:
Пиши еще!: Алексей Немиро
Комментарий #1 (ссылка)23 декабря 2008 / 15:57
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


kibernetics пишет:
1. Как бы это лучше собрать значения всех дропдаунов для формирования условия (...WHERE Field1 = ddl1, Field2 = ddl2... и т.д.)

Сделать кнопку, по-другому никак. В Web, даже при использовании AJAX, механизм обновления грида, при выборе значений из каждого списка, будет "дорого стоить".

kibernetics пишет:
2. Более важный вопрос. Значения может быть кое-как соберу, но вся беда в том, что при обновлении грида (после databindinga, страница перегружается) в дропдаунах нет того значения по которому я отфильтровывал грид. Как их оставить, чтоб были в том состоянии как я их выбрал?

Состояние списков должно сохраняться, если НЕ стоит EnabledEventState=False и если списки не обновляются (данные повторно в них не загружаются) - IsPostBack.

kibernetics пишет:
3. В дропдаун данные биндятся из таблицы. Но нужно вставить также и одно поле пустое (типа, сброс по фильтру - ничего не выбрано). Это лучше программно добавить в ддл один айтем? И потом проверять, а не пустая ли строка в ддл выбрана... Или есть другой вариант?

Да, лучше добавить самостоятельно. Пустое поле можно добавить в событие DataBinding, которое происходит после заполнения списка данными. Добавить можно через метод Insert.
Собственно, если в первом вопросе будет кнопка, то такую же кнопку можно для сброса фильтров сделать. Обычно так и делается.
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)
Комментарий #2 (ссылка)23 декабря 2008 / 17:27
kibernetics
Пользователь
ку 16.0390645+

вопросов: 6
советов: 0
ответов: 2
комментариев: 17


Поставил для дропдауна EnabledEventState=True.
В событии Page_Load сделал:
If Page.IsPostBack = False Then
Dim cmb As DropDownList = DirectCast(GridView1.HeaderRow.FindControl("DropDownList1"), DropDownList)
cmb.DataBind()
End If

но всё равно, дропдаун выставляется в изначальное положение...
Алексей, подсоби, как подравитькод?
Или не указывать изначально для ддл датаконнекшин, а формировать его при Page_Load?
ддл должен быть в EnabledEventState=True
Комментарий #3 (ссылка)23 декабря 2008 / 19:04
kibernetics
Пользователь
ку 16.0390645+

вопросов: 6
советов: 0
ответов: 2
комментариев: 17


В общем, сделал такой код для формлоад:
  1. If Page.IsPostBack = False Then
  2.             Dim cmb As DropDownList = DirectCast(GridView1.HeaderRow.FindControl("DropDownList1"), DropDownList)
  3.             cmb.DataSource = SqlDataSource1
  4.             cmb.DataValueField = "LeaderID"
  5.             cmb.DataTextField = "LeaderName"
  6.             cmb.DataBind()
  7.             cmb.Items.Add("")
  8.         End If

но при перегрузке страницы, в ддл становится пустой список. ничего туда не грузится.
мне нужно при смене DropDownList1_SelectedIndexChanged перебиндить грид.
А без EnabledEventState=True этого не сделаешь.

П.С. добавляю в конце пустую строчку. а как её вытянуть на самый верх дропдауна? а то она получается в самом низу. а индекса нету...
а хотелось бы чтобы при её выборе индекс был равен 0.
Комментарий #4 (ссылка)24 декабря 2008 / 04:01
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


kibernetics пишет:
Поставил для дропдауна EnabledEventState=True.

Оно по умолчанию равно True.

kibernetics пишет:
Алексей, подсоби, как подравитькод?

ага, проблема в том, что биндится GridView, а с ним и списки..

kibernetics пишет:
П.С. добавляю в конце пустую строчку. а как её вытянуть на самый верх дропдауна?

метод Insert.
cmb.Items.Insert(0, New ListItem(0, ""))'как-то так, не проверял

Тогда придется принудительно выбирать в списках нужный Item, но только после загрузки данных в GridView. В событие DataBinding искать DropDownList-ы и ставить им SelectedIndex|Value, только перед этим нужно запомнить, какие Item-ы были выбраны (до бинда грида).

ps: проблем было бы меньше, если бы фильтры были за гидом.
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)
Комментарий #5 (ссылка)24 декабря 2008 / 10:28
kibernetics
Пользователь
ку 16.0390645+

вопросов: 6
советов: 0
ответов: 2
комментариев: 17


Алексей Немиро пишет:
ps: проблем было бы меньше, если бы фильтры были за гидом.


:) Это понятно, Лёша, но ведь это же АСП.НЕТ!!!
Тут не может быть чего-то невозможного.
Надо мутить просто, хоть и через ...

Алексей Немиро пишет:
Тогда придется принудительно выбирать в списках нужный Item, но только после загрузки данных в GridView. В событие DataBinding искать DropDownList-ы и ставить им SelectedIndex|Value, только перед этим нужно запомнить, какие Item-ы были выбраны (до бинда грида).

вот. а где хранить значения ддл? после перегрузки, все вариаблы обнуляются. получается, в сессии хранить чтоли? или за пределами страницы гдето место найти.
Комментарий #6 (ссылка)24 декабря 2008 / 12:45
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


kibernetics пишет:
:) Это понятно, Лёша, но ведь это же АСП.НЕТ!!!
Тут не может быть чего-то невозможного.

Невозможного вообще ничего нет smile. Вся проблема в, имхо, не лучшем контроле, GridView, коих в ASP .NET предостаточно. То, что ты хочешь сделать, можно сделать и на классическом ASP и на PHP, правда придется писать все руками, хотя в данном случае, это не так сложно, может быть даже интересно smile.
На ASP .NET, чтобы все было тип-топ, нужно либо переписывать GridView, либо делать свою альтернативу.

kibernetics пишет:
вот. а где хранить значения ддл?

любые значения можно найти в Request.

  1. If Page.IsPostBack = False Then
  2.             Dim cmb As DropDownList = DirectCast(GridView1.HeaderRow.FindControl("DropDownList1"), DropDownList)

а здесь не ловится?
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)
Страницы:    < назад    ·    вперед >
1
Зарегистрируйтесь, чтобы иметь возможность участвовать в жизни форума.