Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

RowSelection in TCustomDBGrid   Найти похожие ветки 

 
maVladimir   (2005-10-16 20:23) [0]

Уважаемые кодеры, появилась небольшая проблема, но не знаю, как ее решить, подскажите, пожалуйста:

Как заставить TCustomDBGrid выбрать необходимую строку (dgRowSelect in Options = true)? Абсолютно ясно, что это можно сделать, обращаясь к Selection, но тогда не произойдет изменений с Bookmarklist"ом Grid"а, а необходимо именно это.

Заранее благодарен, Владимир.


 
Германн ©   (2005-10-16 21:09) [1]

А присвоить нужное значение свойству Row?


 
Германн ©   (2005-10-16 21:11) [2]

Пардон. Его там нет :(


 
Плохиш ©   (2005-10-16 23:09) [3]


> Как заставить TCustomDBGrid выбрать необходимую строку (dgRowSelect
> in Options = true)? Абсолютно ясно, что это можно сделать,
>  обращаясь к Selection, но тогда не произойдет изменений
> с Bookmarklist"ом Grid"а

Ничего не понял :-( Как можно ответить на вопрос, в котором упоминается TCustomDBGrid, не имеющий свойств/методов RowSelection, Selection и Bookmarklist?


 
maVladimir   (2005-10-17 01:58) [4]

> Плохиш
Ну тогда так и надо отвечать: мол, я не знаю, о чем ты пишешь, и вообще, зачем я сюда залез?

> Для остальных
RowSelection здесь вообще ни при чем, это для названия темы просто.
Selection наследуется от TCustomGrid.
А Bookmarklist - это read-only поле SelectedFields класса TCustomDBGrid.
В общем, тем, кто что-то в этом понимает, должно быть понятно все, о чем я говорю.
А вопрос такой: как можно выделить одну (или несколько подряд идущих) строк(у) таким образом, чтобы они были выделены и в Selection, и в SelectedFields?

Владимир.


 
Zacho ©   (2005-10-17 02:16) [5]

maVladimir   (17.10.05 1:58) [4]

Я в этом ничё не понимаю, но почему бы тебе не посмотреть исходники TDBGridEh из библиотеки EhLib ?


 
maVladimir   (2005-10-17 14:43) [6]

> Zacho
Спасибо за совет, но это решение не годится по нескольким причинам:
1) Не хочу использовать никакую "левую" библиотеку.
2) Теперь это уже вопрос принципа.

Неужели никто не знает другого решения?

С уважением, Владимир.


 
alex_***   (2005-10-17 14:49) [7]

а курсор в наборе установить куда надо не проще?


 
Johnmen ©   (2005-10-17 15:00) [8]


> maVladimir   (17.10.05 01:58) [4]
> > Для остальных
> RowSelection здесь вообще ни при чем, это для названия темы
> просто.
> Selection наследуется от TCustomGrid.
> А Bookmarklist - это read-only поле SelectedFields класса
> TCustomDBGrid
.
> В общем, тем, кто что-то в этом понимает, должно быть понятно
> все, о чем я говорю.
> А вопрос такой: как можно выделить одну (или несколько подряд
> идущих) строк(у) таким образом, чтобы они были выделены
> и в Selection, и в SelectedFields?


Я тоже ничего не понял... Особенно выделенное :)
М.б. тебе надо TDBGrid.SelectedRows.CurrentRowSelected ?


 
Zacho ©   (2005-10-17 15:00) [9]

maVladimir   (17.10.05 14:43) [6]
1) Не хочу использовать никакую "левую" библиотеку.


А ты не используй, а просто посмотри как там сделано.


 
msguns ©   (2005-10-17 15:48) [10]

>Как заставить TCustomDBGrid выбрать необходимую строку (dgRowSelect in Options = true)? Абсолютно ясно, что это можно сделать, обращаясь к Selection, но тогда не произойдет изменений с Bookmarklist"ом Grid"а, а необходимо именно это.

>В общем, тем, кто что-то в этом понимает, должно быть понятно все, о чем я говорю.

Беда не в том, что я не понимаю, как это сделать указанными средствами, убей - не - пойму, зачем это надо сделать !
Если нужно каким-то образом запомнить выделенные в гриде записи датасета, то это делается совсем другим способом. И букмарки здесь не только не нужны, но даже опасны ;)


 
maVladimir   (2005-10-17 18:54) [11]

> Zacho
Если не найду ответа, то придется сделать так, как ты посоветовал. Спасибо.

> msguns
Мне не надо запоминать выделенные в гриде записи датасета. Наоборот, хотелось бы выделить определенную i запись датасета.
Поясню: когда я кликаю на гриде мышкой, то в Selection заносится строка грида (если установлен RowSelect), содержащая эту запись, и в SelectedFields заносится bookmark на эту запись в датасете. Это же происходит при скроллинге, нажатии на клавиши up, down. Так вот, мне совершенно непонятно, каким образом мне вот так же можно было бы выделить какую-то i запись. Надеюсь, теперь более понятно.


 
Johnmen ©   (2005-10-18 09:11) [12]

>maVladimir   (17.10.05 18:54) [11]

Уважаемый, вы бы спрашивали конкретно, что вам надо, а не вещали бы нам чушь.


 
maVladimir   (2005-10-18 11:00) [13]

> Johnmen
Можно и покорректнее отвечать. А если непонятно, о чем вообще речь идет (даже в случае неправильной постановки вопроса), то лучше не писать ничего, чем писать такую чушь. А то, что я некорректно вопрос задал, это уж лично мое дело. Вам в этом случае надо просто вежливо промолчать.

А как конкретно спросить, я не знаю. Может быть так:
Необходимо программно выделить произвольную строку в TDBGrid"е.


 
Johnmen ©   (2005-10-18 11:10) [14]

>maVladimir   (18.10.05 11:00) [13]
>Вам в этом случае надо просто вежливо промолчать.

"Не говорите мне, что я должен делать, и я не скажу, куда вам надо идти" (с) Фома:)

>Необходимо программно выделить произвольную строку в TDBGrid"е.

0. То есть выделить незнамо что ???
1. В TDBGrid"е нет строк! Они есть в наборе данных.
2. Ещё раз [8], в конце.


 
Плохиш ©   (2005-10-18 11:11) [15]


> maVladimir   (18.10.05 11:00) [13]
> А то, что я некорректно вопрос задал, это уж лично мое дело.

Хм, ты делаешь нам одолжение, задавая вопрос?

> А как конкретно спросить, я не знаю. Может быть так:
> Необходимо программно выделить произвольную строку в TDBGrid"е.
>

Читай книжки/справку.


 
Johnmen ©   (2005-10-18 11:13) [16]

PS

>А то, что я некорректно вопрос задал, это уж лично мое дело.

Если этот вопрос ты задал сам себе. А если в общественном месте, то это не так...


 
msguns ©   (2005-10-18 13:50) [17]

>maVladimir   (17.10.05 18:54) [11]
>Надеюсь, теперь более понятно.

Более-менее. Т.е. ты хочешь каким-то образом запоминать и визуально выделять (например, другим цветом или "псысой") те записи, которые юзер "отметил" и при этом
1. Записи могут находиться в произвольных местах грида
2. "Выделенные" записи не должны "потеряться" при переоткрытии НД после, например, удаления записей или переупорядочения.

Если я правильно тебя понял, то забудь пр все, чем ты оперировал до этого, начиная от TCustomDBGrid и заканчивая букмарками и всякими dgRowSelect, SelrctedRows и т.д.
Это решается совершенно другими средствами. "От грида" в реализации участвует лишь OnDrawColumnCell. Все остальное решается через массив указателей и методы (св-ва) датасета.


 
maVladimir   (2005-10-18 14:51) [18]

А то, что я некорректно вопрос задал, это уж лично мое дело.
подразумевало под собой "лично моя проблема", т.е. то, что я не могу задать вопрос по-человечески, это моя проблема, и по-хорошему мне ее надо решить.

> msguns
Большое спасибо за внятный ответ. Пойду читать хелп.

> to all
Извиняюсь перед всеми за невнятно поставленный вопрос.

P.S. И еще: уверен, что никто из Вас не родился со знанием всего того, что вы сейчас знаете. Я же занимаюсь Delphi всего полгода и, так сказать, являюсь чайником в этом деле, а потому не всегда могу правильно поставить вопрос. К сожалению, большинство ответов, которые здесь прозвучали, имеют выраженную негативную окраску (типа "ты чайник, а потому не можешь быть удостоен хорошего ответа!"), и это уже идеологический вопрос и дело каждого.
Ничего плохого я этим сказать не хотел - просто мысли вслух.


 
Johnmen ©   (2005-10-18 14:58) [19]

>maVladimir   (18.10.05 14:51) [18]
>К сожалению, большинство ответов, которые здесь прозвучали, имеют
>выраженную негативную окраску

Тебе показалось.
Как и бывает обычно с теми, кто молод и мнителен.
Но на пути просветления, хотелось бы думать...

ЗЫ
Вот интересная ссылка http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
msguns ©   (2005-10-18 17:18) [20]

Наводка:
Записи НД должны иметь нечто, однозначно их идентифицирующее. Лучше всего подходит поле UID (Часто оно PK+AutoInc).
Создай у себя в проге список указателей, куда при "чекании" юзером соответствующим обработчиком события будет добавляться (или удалаться, если уже есть) UID текущей записи НД, отображенного в гриде.
В событии грида OnDrawColumnCell надо делать поиск в этом списке UID записи, обращаться к которому можно, например, так

Field.DataSet.FieldByName"UID".AsInteger

Сам поиск можно сделать либо процедурой, либо, если лень писать, то обычным методом списков IndexOf, правда для этого в список надо помещать не самое значение счетчика, а его симв.аналог

В зависимости от результата поиска либо отмечать запись (например "галочкой" в "свободной" ячейке грида (в обработчие OnGetText поля, на которое ссылается колонка, надо написать Text := "" во избежание "накладок") путем размещения в ней соотв-го битмапа, либо красит строку в отличный от фона грида цвет)
либо - не отмечать.

И вся канитель ;)



Страницы: 1 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.045 c
2-1131272291
Er
2005-11-06 13:18
2005.11.27
dll


5-1113600533
Бывший студент
2005-04-16 01:28
2005.11.27
Перекрываем TCustomGrid.DrawCell


8-1120170499
ronyn
2005-07-01 02:28
2005.11.27
Неужели нет короткого кода для изменения громкости?!


2-1131810989
The Sound
2005-11-12 18:56
2005.11.27
Кирилица в имени файла.


14-1130915105
boalse
2005-11-02 10:05
2005.11.27
Компьютерный ажиотаж.