Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Выделение записи в DataGridView


Автор: EuGenius_Krivbass 9.4.2008, 16:31
DataGridView работает таким образом, что в него загружаются только необходимые в данный момент записи
из DataTable. Рядом с DataGridView есть Scroll.
По скролу определяется, какой диапазон вытягивать для DatagridView из DataTable.
При нажатии на Up в верхней строке DataGridView  - содержимое перегружается со смещением на одну позицию вверх, 
т.е. если была верхняя запись с индексом 15, то станет 14.
Необходимо оставлять выделение строки по отношению к DataGridView (была выделена первая - первая и остается, была 14 - 14 и остается), хотя содержимое строк меняется.
А теперь проблема:
 по кнопке Up - перегружается и выделенная строка остается на своем месте
по скроллу как вверх , так и вниз - то же самое (все хорошо)
по кнопке Down, если курсор на самой нижней строке - DataGridView перегружается, но выделенной строкой становаится строка с индексом в гриде 1!
(вторая сверху)

Как это последнее выделение сделать для нижней строки?
Боков, типа где-то случайно назначил в приложении "1" нету.
после загрузки грида новым содержимым происходит переназначение выделенной строки.
количество строк - всегда одинаковое - зависит от размера самого грида.
В событии OnPaint - четко видно, что грид поставил выделенной строкой - с индексом 1

Автор: vponomarov 9.4.2008, 17:23
EuGenius_Krivbass, а если попробовать ПЕРЕД скролом запоминать индекс выделенной строки, потом загружать новую инфу и выделять строку с индексом который мы запомнили?

Автор: EuGenius_Krivbass 9.4.2008, 17:47
Я именно так и делаю, но после установки мною необходимого индекса, DataGridView сам меняет его на "1"

Автор: EuGenius_Krivbass 9.4.2008, 18:28
Это просто УЖАС!!!!!

так не работает(для кнопки KeyDown):
Код

gvPeople.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

if (gvPeople.SelectedCells.Count >0)
                selectedRowIndex = gvPeople.SelectedCells[0].RowIndex;
//...заполняем
if (selectedRowIndex > 0 && selectedRowIndex < gvPeople.Rows.Count)
                gvPeople.Rows[selectedRowIndex].Selected = true;



а так все прекрасно работает, [censored 6]:
Код

//...заполняем
if (selectedRowIndex > 0 && selectedRowIndex < gvPeople.Rows.Count)
                gvPeople.Rows[selectedRowIndex].Cells[0].Selected = true;


Автор: IApple 10.4.2008, 09:27
1) Вообще страные вопросы у Вас... Не пойму зачем что-либо высчитывать при нажатии Down, если по условию (после новой загрузки) необходимо просто выделить ПОСЛЕДНЮЮ из загруженых в грид?
2) 1 зашита не в вашем коде, а в гриде - ваша "перезагрузка" даных вынуждает его сбросить Selected в 0, после чего обрабатывается Down увеличением этого нуля на 1...

Автор: EuGenius_Krivbass 11.4.2008, 15:22
Цитата(IApple @  10.4.2008,  08:27 Найти цитируемый пост)
необходимо просто выделить ПОСЛЕДНЮЮ из загруженых в грид?

как раз последняя и выделяется после того, как загружен грид, но выделение сбрасывается на 1(согласен с тем, что может быть реакция на Down)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)