jek1976
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: И зачем такие сложности самому себе придумывать? Даже не могу себе представить ситуацию, когда это может понадобится. | Программа, частью которой является обсуждаемая здесь проблема, предназначена для ведения библиографического каталога печатных и электронных изданий. Ситуация очень проста: есть таблица (сделана на основе контрола VSFlexGrid) с ФИО авторов (книг, статей и проч.), данные в которую копируются из БД. Из этой таблицы необходимо выбрать авторов, размещая их в том порядке, в каком они перечислены в оригинале, т.е. на самом издании. Список авторов удобнее всего сформировать, просто щелкая на соответствующих строках таблицы с ФИО авторов, причем, сами понимаете, результат выстраивания ФИО авторов должен соответствовать тому порядку, в котором производились щелчки в этой самой таблице. Теперь понятно? Добавлено: Цитата: Можно попробовать добавить еще одно поле в грид и в нем ставить номер по порядку. В самом грие, а не в массиве. Порядковый номер храним в переменной и добавляем 1 по мере выделения чекбокса. При снятии выдеоения просто очищаем поле. После окончания юзером селекта, прбегаем по гриду и заносим номера и другие данные в многомерный массив | Представьте себе юзера, которому надо будет так мудрить с расстановкой номеров, просто для того, чтобы выбрать список несчастных авторов!!! А если, выбрав несколько авторов путем расстановки номеров, юзер поймет, что первый автор не нужен, то ему что, заново перенумеровывать список? Ваше решение - неудачное для юзера, но простое для реализации программистом. Что может быть проще для юзера, чем щелчки по нужным строкам в таблице авторов. Причем выстраивание авторов идет в том порядке, в котором производились щелчки - просто и понятно. Но за такой простотой для пользователя скрывается сложность для программиста. А состоит она в том, что приходится учесть уж очень разные ситуации с выбором строк, такие как: 1) выделение диапазона смежных строк только при помощи мыши, 2) выделение диапазона смежных строк, производимое с нажатой клавишей Shift, 3) выделение несмежных строк (производимое с нажатой клавишей Ctrl), 4) неупорядоченное снятие выделения у одной или нескольких строк, включая строки, находящиеся внутри диапазона (т.к. юзер может ошибиться (промахнуться мимо) и щелкнуть не того или не тех авторов, которые нужны). Код разрастается до больших размеров и при этом еще не реализована возможность учета снятия выделения строк. Я думал, в контроле VSFlexGrid должно быть реализовано нечто подобное, ведь в нем существует же перечислитель всех выделенных строк, о котором я упомянул выше. |