|
Комп_Оратор)
|
|||||||||||
dataGreedVew - bug-a или feature-?31.01.2012, 18:00. Показов 1233. Ответов 12
Метки нет (Все метки)
//vs2008
//добавляем на форму в дизайнере dataGridView1 //там же добавляем в dataGridView1 три столбца add columns //получаем табличку из 3-х ячеек по горизонтали - Ok! //сразу выберите размер видимой области что бы поместилось 3-5 Rows (строк таблицы) //Добавляем кнопку с таким вот кликом
//теперь закоментируем первую строчку в обработчике
Добавлено через 4 часа 53 минуты Забавно, не уж-то это только у меня такой глюк
0
|
|||||||||||
| 31.01.2012, 18:00 | |
|
Ответы с готовыми решениями:
12
Streaming cluster replication bug or ne bug BUG или фича с PasswordChar Bug NetBeans или я тупой |
|
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
|
|
| 31.01.2012, 19:04 | |
|
IGPIGP, судя по всему это не глюк, просто если включена возможность добавления новых строк в грид, то последняя строка, которая служит для вставки новых строчек, тоже считается элементом коллекции DataGridView::Rows. То есть если возможность добавления столбцов будет включена, то изначально в гриде значение Rows->Count будет равно 1, следовательно последний код добавит одну строку, так что Rows[1] окажется валидным элементом, и будет записана информация в эту последнюю строчку, которая нужна для вставки; а если столбцы добавлять нельзя, тогда Rows->Count будет 0, и при исполнении последнего приведённого кода вылетит ошибка времени выполнения, говорящая о том, что имеется выход за рамки коллекции DataGridView::Rows.
0
|
|
|
Комп_Оратор)
|
|||||||
| 31.01.2012, 21:31 [ТС] | |||||||
|
Дело в том, что ошибок то не вылетает. Я специально привел код в котором раскрасил ячейку заполняемую значением, что бы получить максимум впечатлений. Первый код работает нормально, а во втором:
2,1; 3,1; 4,1 и т.д.
0
|
|||||||
|
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
|
||
| 31.01.2012, 21:58 | ||
|
0
|
||
|
Комп_Оратор)
|
|
| 31.01.2012, 22:29 [ТС] | |
|
Последняя строка не остается неизменной а заполняется значением, а не должна бы. Посмотрите как первый вариант работает - нормально работает. Добавляем по 2 строки и все окей - обновляется только клетка 1,1.
ДатаГрид - индексно адресуется как 2-мерный массив (должен), но когда добавляется 1 строка (я долго не экспериментировал, но это вроде единственный случай) обновляется последняя добавленная!
0
|
|
|
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
|
|||||||||||||||||||||
| 31.01.2012, 22:48 | |||||||||||||||||||||
|
IGPIGP, я имел ввиду то, что если включена возможность добавления записей в грид ручками на форме, тогда содержимое коллекции Rows всегда выглядит следующим образом:
Более того, можно попробовать написать в тот метод ещё нечто вроде
1
|
|||||||||||||||||||||
|
Комп_Оратор)
|
||
| 31.01.2012, 23:09 [ТС] | ||
![]() Вернемся к цитате: "сначала заполняется последняя строка" - и это единственный раз правильно, т.к. строк уже 2-е (была одна и + один add)? а поскольку стартовый индекс ноль, [1][1] вторая сверху, вторая слева, и это в обоих вариантах одинаково при первом нажатии. Со второго нажатия первый вариант работает верно [1][1], а второй обновляет (перемещает посути [1][1] вконец), ячейку с координатами rows[нижний] cells[1] Вообще обещаю, сегодня пока будет возможность, и завтра перечитаю Ваш ответ, что-то я в нем не понял, а это значит, что-то в нем есть
0
|
||
|
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
|
|||||||||||||||||||||||
| 31.01.2012, 23:37 | |||||||||||||||||||||||
|
В самом начале, при создании грида, контейнер строк у грида имеет вид такой:
Мы нажимаем button, что происходит — добавляется строка с идентификатором Row_1, прямо перед элементом с ID = "TheLastOne". Контейнер строк Rows выглядит так:
Теперь нажимаем второй раз на button, что получается теперь — опять же, перед последним элементом TheLastOne добавляется новая строчка, то есть относительное положение элемента TheLastOne в контейнере не изменилось, но перед ним появилась новая строка. Итого контейнер строк выглядит так:
И как мы сейчас установили, при каждом последовательном добавлении строки мы будем иметь контейнер Rows в следующем виде
То есть в первом случае, как Вы и сказали, обновляется только вторая строчка, второй столбец. А во втором случае, получается так, что мы затрагиваем этот элемент, который сначала был на позиции[1][1], но при последующих вставках он просто перемещается выше, плюс к тому, начиная со второго вызова обработчика, как и положено, обновляется вторая строчка, второй столбец.
1
|
|||||||||||||||||||||||
|
Комп_Оратор)
|
|
| 01.02.2012, 00:13 [ТС] | |
|
У одного популярного римского сенатора была фраза которая звучала как-то так:
"Если это все и неправда, то придумано очень хорошо!". Не подумайте, что язвлю, наоборот примите как комплимент . Скорее всего это содержит логику поведения dataGreedVeW. Но не оправдывает. Ведет то она себя нехорошо. Как объяснить расхождение в поведении после первого клика пользуясь Вашей логикой? В первом случае у нас первым кликом инициализируется тоже [1][1] и в первый раз оно совпадает с [1][last_one]. Если он тупит и не может выпустить проинициализированную ячейку в last_one, то и при добавлении двух ячеек должна держать ее в последней строке зубами. Забавно, кстати то, что я с dataGreedVew работаю давненько, но ничего подобного не замечал. Вчера когда обнаружил эту feature посидел ночью чуток проверяя, как в последней проге дела. Слава богу везде сначала определяется размерность таблицы, а потом заполнение в цикле. Вроде везде все работает верно. Однако буду ещё проверять, сомнения есть...Сейчас уже почти сплю. Впрочем до 1-00 все равно не светит. Так, что если не устали меня переубеждать - попробуйте, еще... хотя лучше - завтра бо голова у меня сейчас - ясень. ![]() Если перечитав завтра окажется, что я протупил и у Вас все логично, буду просить прощения, но это будет завтра
0
|
|
|
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
|
||
| 01.02.2012, 00:23 | ||
На всякий пожарный, просто чтобы не перечитывать слишком много текста, приведу маленькую сводку, как оно получается на деле. В первом случае, когда мы добавляем сразу две строки и вносим изменения в ячейку за номером [1][1], то последняя строка вообще не изменяется(она представляет собой особый случай, как мы выяснили), поэтому при дальнейших действиях никаких странностей(в последней строке ничего не появляется, потому что мы её не трогали).А при добавлении одной строки, мы в первый раз "задеваем" этот особый объект "последней строки", вот он и волочится вслед за всеми остальными строками со своими изменениями на последней позиции контейнера Rows. Мне кажется, всё логично
0
|
||
|
Комп_Оратор)
|
|||||||
| 01.02.2012, 17:49 [ТС] | |||||||
|
Что-же касается вопросов "Почему она так делает?" и "Правильно ли она делает?" - не убедили Вы меня Ma3a. Проиллюстрирую, еще так:
Жмем button2 раз 5. Всё правильно. А теперь парами т.е. Жмем button1, жмем button2. И так 5 раз. Результат другой. Но в коде обр. каждой кнопки видно без затей - одна добавляет строку, вторая присваивает УКАЗАННУЮ ПРЯМО ячейку .И обычно все получает именно так, только не в данном случае... Хоть бы написали, где-то We're proud to present the outstanding feature of... Может плохо читал. У меня английский - так-себе...
0
|
|||||||
|
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
|
|||||
| 01.02.2012, 18:16 | |||||
![]() ![]()
1
|
|||||
|
Комп_Оратор)
|
|
| 01.02.2012, 18:25 [ТС] | |
|
Спасибо, еще раз Ma3a, стало быть DataGridView не только у меня такой. Почему ни-кто больше не высказался - не знаю... Наверное что-то знают, но молчат
![]() Тема закрыта.
0
|
|
| 01.02.2012, 18:25 | |
|
Помогаю со студенческими работами здесь
13
Feature.xml slider jquery-feature-carousel Определение признаков (feature selection) Ignoring Portion Of Document That Uses A Feature From Another Version Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита табличной части. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|