Реализация позиционирования и раскраски строк в DBGrid в DELPHI
При работе с системой баз данных я обнаружил, что строку данных в элементе управления DBGrid невозможно позиционировать и что после обнаружения определенной строки текущая строка не может быть четко обозначена (например, при изменении цвета после большого поиска). информации, я обнаружил, что к этому контенту практически нет введения, включая некоторые динамические цвета верхних строк. В таких статьях, как Se и другие, говорится об операциях, выполняемых во время инициализации данных, но функция изменения положения после обновления источника данных отсутствует, поэтому я решил решить эту проблему. После утреннего исследования справки DELPHI и просмотра соответствующей информации я решил. получил немного Сяочэна, теперь запиши это и учись на этом вместе со всеми моими коллегами. Пожалуйста, дайте мне несколько советов по поводу любой неуместности.
Сначала я просмотрел элементы управления Ttable и Tquery и не нашел метода, который мог бы напрямую найти строку данных. Я также искал DBGrid и не нашел соответствующей функции, которая могла бы напрямую найти определенную строку данных. Затем я начал поиск в классе. data set. После непрерывных усилий я наконец нашел его. Я нашел метод в TdataSet: GoToBookmark. Этот метод может сделать указатель записи в текущем DBGrid указателем на строку, которую вам нужно указать.
После нахождения этого метода проблема решена лишь наполовину. Цвет строки данных, на которую указывает текущий указатель, также должен быть изменен. То есть текущая выбранная строка должна быть отмечена очевидным образом (за исключением маленькой). и неприглядная отметка на DBGrid). (За исключением очевидных закладок) Это, очевидно, реализовано в элементе управления DBGrid. В элементе управления DBGrid есть событие OnDrawDataCell. Перегрузка этого метода может изменить цвет указанной строки данных.
Конкретный процесс использования выглядит следующим образом:
(1) Динамическое позиционирование строк данных
//============================================== ===============
//Имя процесса: DyDbgDataLine
//Автор: Гаитян
//Дата: 22 февраля 2003 г.
//Функция: автоматически перейти к строке данных в элементе управления DBGrid, которая соответствует этому условию, на основе условий, указанных пользователем.
//Входные параметры:
// sValue: значение строки, которую в данный момент необходимо переместить;
// вкладка: данные соответствующей таблицы в текущем DBGrid;
// dsr: источник данных, которым в данный момент необходимо управлять;
//Возвращаемое значение: Нет
//Изменить записи:
//============================================== ================
PROcedure DyDbgDataLine(sValue:string;tab:Ttable;dsr:TDatasource)
вар
закладка: TBookMark;
начинать
//Записываем текущую отмеченную строку;
закладка:=self.tab.GetBookmark;
self.tab.first;
пока не self.tab.Eof сделать
начинать
если self.tab.FieldByName('cpbh').AsString= sValue, тогда
начинать
закладка:=self.tab.GetBookmark;
перерыв;
конец;
self.tab.Next;
конец;
self.dsr.DataSet.GotoBookmark(указатель(закладка));
Конец;
Описание. Используемая таблица привязана к DBGrid в текущем интерфейсе дисплея;
(2) Измените цвет, чтобы отметить текущую строку данных.
Сначала установите для свойства DefaultDrawing DBGrid значение false, затем вызовите следующую функцию в функции события OnDrawDataCell:
//============================================== ===============
//Имя процесса: DrawLine
//Автор: Гаитян
//Дата: 22 февраля 2003 г.
//Функция: изменить цвет указанной строки в Dbgrid как метки;
//Входные параметры:
// zdm: имя поля;
// Rect: единица строки, в которую необходимо войти и выйти;
// Поле: отображаемое в данный момент поле;
// состояние: статус отображения текущей строки;
// zdz: значение строки, которую в данный момент необходимо переместить;
// вкладка: данные соответствующей таблицы в текущем DBGrid;
// dbg: DBGrid, которым в данный момент нужно управлять;
//Возвращаемое значение: Нет
//Изменить записи:
//============================================== ================
procedurDrawLine(tab:Ttable;const Rect:Trect;Field:Tfield;state:TgridDrawState;dbg:TDBGrid)
начинать
если (tab.fieldbyname(zdm).asstring=zdz), то
начинать
dbg.canvas.font.color:=clred;
dbg.canvas.brush.color:=clyellow;
конец;
dbg.DefaultDrawDataCell(Rect,Field,State);
конец;