Как да поставите отметка в DBGrid

click fraud protection

Има много начини и причини да персонализирате изхода на a DBGrid в Delphi. Един от начините е да добавите отметки, така че резултатът да бъде по-привлекателен визуално.

По подразбиране, ако имате логическо поле в набора от данни, DBGrid показва ги като "Вярно" или "Неверно" в зависимост от стойността на полето за данни. Въпреки това изглежда много по-добре, ако решите да използвате "вярно" контролно поле, за да активирате редактирането на полетата.

Създайте примерно приложение

Стартирайте нова форма в Delphi и поставете TDBGrid, TADOTable и TADOConnection, TDataSource.

Оставете всички имена на компоненти такива, каквито са, когато са били пуснати за първи път във формата (DBGrid1, ADOQuery1, AdoTable1 и т.н.). Използвайте Object Inspector, за да зададете свойство ConnectionString на компонента ADOConnection1 (TADOConnection), за да насочите към примерната база данни на QuickiesContest.mdb MS Access.

Свържете DBGrid1 към DataSource1, DataSource1 към ADOTable1 и накрая ADOTable1 към ADOConnection1. Свойството ADOTable1 TableName трябва да сочи към таблицата Article (за да накара DBGrid да показва записите на таблицата Article).

instagram viewer

Ако сте задали всички свойства правилно, когато стартирате приложението (като се има предвид, че Active свойството на компонента ADOTable1 е Вярно) трябва да видите по подразбиране DBGrid да показва стойността на булевото поле като „True“ или „False“ в зависимост от стойността на данните област.

CheckBox в DBGrid

За да покажем квадратче за отметка вътре в клетка на DBGrid, ще трябва да направим такава налична за нас по време на изпълнение.

Изберете страницата „Контроли на данни“ на Палитра за компоненти и изберете a TDBCheckbox. Хвърлете един навсякъде във формата - няма значение къде, тъй като през повечето време той ще бъде невидим или ще плава над мрежата.

Бакшиш: TDBCheckBox е контролиращ данните данни, който позволява на потребителя да избере или премахне избор на единична стойност, която е подходяща за булеви полета.

След това задайте свойството Visible на False. Променете свойството Color на DBCheckBox1 на същия цвят като DBGrid (така че се смесва с DBGrid) и премахнете надписа.

Най-важното е, уверете се, че DBCheckBox1 е свързан към DataSource1 и правилното поле.

Обърнете внимание, че всички по-горе стойности на свойствата на DBCheckBox1 могат да бъдат зададени в събитието OnCreate на формата като това:

процедура TForm1.FormCreate (подател: TObject);
започвам
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'Победител';
DBCheckBox1.Visible: = Грешно;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = '';
// обяснено по-късно в статията
DBCheckBox1.ValueChecked: = 'Да победител!';
DBCheckBox1.ValueUnChecked: = 'Не този път.';
край;

Следващото е най-интересната част. Докато редактирате булевото поле в DBGrid, трябва да се уверим, че DBCheckBox1 е поставен над ("плаваща") клетката в DBGrid, показваща булевото поле.

За останалите (не-фокусирани) клетки, носещи булеви полета (в колоната "Победител"), трябва да предоставим някакво графично представяне на булевата стойност (True / False). Това означава, че имате нужда от поне две изображения за рисуване: едно за провереното състояние (True стойност) и едно за непроверено състояние (False value).

Най-лесният начин да постигнете това е да използвате функцията на Windows API DrawFrameControl за рисуване директно върху платното на DBGrid.

Ето кода в манипулатора на събитията OnDrawColumnCell на DBGrid, който се появява, когато мрежата трябва да нарисува клетка.

процедура TForm1.DBGrid1DrawColumnCell (
Подател: TObject; const Rect: TRect; DataCol:
Цяло число; Колона: TColumn; Състояние: TGridDrawState);
конст IsChecked: масив[Булева] на Целочислено =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK или DFCS_CHECKED);
Var
DrawState: Integer;
DrawRect: TRect;
beginif (gdFocused в членка) thenbeginif (Колона. Field. FieldName = DBCheckBox1.DataField) thenbegin
DBCheckBox1.Left: = Rect. Ляво + DBGrid1.Left + 2;
DBCheckBox1.Top: = Rect. Най-горе + DBGrid1.top + 2;
DBCheckBox1.Width: = Rect. Вдясно - Рект. Наляво;
DBCheckBox1.Height: = Rect. Отдолу - Rect. Горна част;
DBCheckBox1.Visible: = Вярно;
endendelsebeginif (Колона. Field. FieldName = DBCheckBox1.DataField) thenbegin
DrawRect: = Rect;
InflateRect (DrawRect, -1, -1);
DrawState: = ISChecked [Колона. Field. AsBoolean];
DBGrid1.Canvas. FillRect (Rect);
DrawFrameControl (DBGrid1.Canvas. Handle, DrawRect,
DFC_BUTTON, DrawState);
край;
край;
край;

За да завършим тази стъпка, трябва да се уверим, че DBCheckBox1 е невидим, когато напускаме клетката:

процедура TForm1.DBGrid1ColExit (Подател: TObject);
beginif DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField тогава
DBCheckBox1.Visible: = Грешно
край;

Нужни са ни още две събития, за да се справим.

Обърнете внимание, че когато в режим на редактиране всички натискания на клавиши отиват в клетката на DBGrid, трябва да се уверим, че са изпратени до CheckBox. В случай на CheckBox се интересуваме преди всичко от клавиша [Tab] и [Space]. [Tab] трябва да премести фокуса на входа към следващата клетка, а [Space] трябва да превключи състоянието на CheckBox.

процедура TForm1.DBGrid1KeyPress (Подател: TObject; вар ключ: Char);
beginif (ключ = Chr (9)) след това излезте;
ако (DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField) thenbegin
DBCheckBox1.SetFocus;
SendMessage (DBCheckBox1.Handle, WM_Char, word (Key), 0);
край;
край;

Може да е подходящо надписът на квадратчето да се промени, когато потребителят провери или премахне отметката от квадратчето. Обърнете внимание, че DBCheckBox има две свойства (ValueChecked и ValueUnChecked), използвани за определяне на стойността на полето, представена от квадратчето, когато е отметнато или отменено.

Това свойство ValueChecked съдържа „Да, победител!“, А ValueUnChecked се равнява на „Не този път“.

процедура TForm1.DBCheckBox1Click (Подател: TObject);
beginif DBCheckBox1.Checked тогава
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
още
DBCheckBox1.Caption: = DBCheckBox1.ValueUnChecked;
край;

Стартирайте проекта и ще видите квадратчетата за отметки в цялата колона на Победителя.

instagram story viewer