Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255

[C++ builder XE] DBGrid. Нажать на ячейку ЛКМ.

14.04.2012, 13:31. Показов 2547. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Возможно тема заезженная, но не чего путевого не нашел!

Подскажите пожалуйста каким образом можно нажать(кликнуть) ЛКМ на отдельную ячейку DBGrid, например на ячейку [0][1].

Должно получиться что на подобии этого

C++
1
2
3
4
if(//нажали ЛКМ на ячейку с координатами [0][1] )
{
     //выполняем условие
}
Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.04.2012, 13:31
Ответы с готовыми решениями:

[C++ Builder] TRichEdit. Нажать ЛКМ на строку.
Здравсувуйте! Нужна помощь в следующей проблеме! Как можно нажать, например, на 1 строку левой кнопкой мыши? Делал что то...

Нажать ЛКМ
Подскажите как программно сделать двойное нажатие ЛКМ по заданным координатам?

[C++ builder XE] DBGrid. Удаление/добавление/изменение БД mysql через DBGrid
Здравствуйте! Возможно тема заезженная, но не чего путнего не нашел(может так искал!) Нужна помощь в добавлении и изменении...

8
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
14.04.2012, 15:09
Повесить событие на отдельную ячейку будет проблематично, но если я вас правильно понял, то используйте OnCellClick.
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
14.04.2012, 15:33  [ТС]
Сделал так сказать в лоб. Так как на мою реализацию не кто смотрть не будет! Данные данной таблицы не под каким предлогам изменяться не будут!


Поместил на форму Label, в него записываю значание данной ячейки(в моем случаи поля(строки талицы))

При клике на определенную ячейку, в Label записывается ее соджержимое и уже условием проверяю и делаю то что мне нужно.

Как пример

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::DBGrid1CellClick(TColumn *Column)
{
    Label2->Caption = DBGrid1->SelectedField->AsString;//записываю в Label значение выделиного поля
    if(Label2->Caption == "Комп'ютерних систем та мереж")
    {
        ShowMessage("Комп'ютерних систем та мереж");
    }
    else if(Label2->Caption == "Комп'ютерних технологій в управлінні та навчанні")
    {
        ShowMessage("Комп'ютерних технологій в управлінні та навчанні");
    }
    else if(Label2->Caption == "Фундаментальних та інженерно - педагогічних дисциплін")
    {
        ShowMessage("Фундаментальних та інженерно - педагогічних дисциплін");
    }
}
Вот как то так! (Конечно мне вообще не нравится такая реализация)
Миниатюры
[C++ builder XE] DBGrid. Нажать на ячейку ЛКМ.  
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
14.04.2012, 15:42
Возможно, действия могут как-нибудь от ID или номера строки зависят и можно будет оптимизировать. Но трудно сказать, без исходной задачи. Могу лишь предположить, что в зависимости выбранного от описания в таблице N, программа должна открыть таблицу A, B или C, с определенной выборкой. В этом случае могу посоветовать использовать enum (или его аналог в зависимости от типа бд) в таблице и уже в зависимости от него - отображать необходимую таблицу. Но если это курсовой проект, то подобную теорию желательно откладывать на будущее. Если это проект по базам данных, то на код действительно редко обращают внимание.
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
14.04.2012, 16:02  [ТС]
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
Могу лишь предположить, что в зависимости выбранного от описания в таблице N, программа должна открыть таблицу A, B или C, с определенной выборкой.
Суть вы правильно уловили! если описать подзадачу, то!

Две таблицы

1. Название кафедры(3 кафедры)
2. Список преподвателей(соответсвенно каждый преподователь относится к одной из кафедр)

В зависимости от выбранной кафедры во второй DBGGrid (с помощью запроса) выводятся преподователи выбранной кафедры!

Впринципи предложенный мною выше код, мне подходит в данной ситуации и меня уверили что не чего меняться не будет!

Но вдруг через год другой название кафедры поменяется и все happy end! Или какой то user решит просто "поиграться" с программой, с помощью зароса изменит значения таблицы!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
14.04.2012, 16:04
Вопрос:
Есть ли у TDBGrid события OnMouseDown, OnMouseUp и OnMouseMove ?
Ответ:
Они есть, но не объявлены published. Вы можете создать наследника TDBGrid и сделать их published.
1
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
14.04.2012, 16:17
Не помню как называется данный принцип, но думаю, что название для вас роли не играет. Соль в том, что у вас есть таблица "кафедры", где есть поля "ID" (если речь идет о кафедрах, то безнакового целового на 10 столетий хватит, но обязательно primary), "название" (текстовый, уникальный) и "описание" (текстовый, название у нас какое-нибудь ВКХУТЛУ, а тут уже конкретное описание, либо расшифровка, в общем, размер по вкусу). И есть таблица преподаватели, где указаны все необходимые вам данные о преподавательском составе + поле CathedraID, которое имеет тот же тип, что и ID в таблице "каферды", рекомедую создать внешний ключ на эту таблицу, установив каскадный тип при обновлении и обнуление(set null) при удалении (если возможности БД позволяют сделать это). В этом случае, если ID кафедры изменится, то в таблице "предподаватели", они просто изменят свой ключ, а при удалении кафедры, просто поле останется с пустым значением.

А в ПО все просто. При выборе кафедры получаем ее ID и делаем select таблицы "предподаватели", где CathedraID совпадает с полученным. В этом случае, можно будет не беспокоится за ПО, если данные той или иной кафедры изменятся.
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
14.04.2012, 16:22  [ТС]
DefineTrueFalse, Спасибо за совет, помог, ценю!

LK, Спасибо!
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
14.04.2012, 16:24
Цитата Сообщение от LK Посмотреть сообщение
Есть ли у TDBGrid события OnMouseDown, OnMouseUp и OnMouseMove ?
В RAD'е уже есть. Но в этом случае нет гарантии, что была выбрана какая-то ячейка. А при OnCellClick, только если таблица пуста, нужно обрабатывать иссключение (хотя насчет последней строки не уверен). Хотя я бы рекомендовал производить действия по нажатию на кнопку (Button), обрабатывать иссключения не придется, если по умолчанию выбрать один из пунктов.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.04.2012, 16:24
Помогаю со студенческими работами здесь

Програмное нажатие на ячейку в DBgrid
Доброго времни суток всем. нужна ваша помощь! как программно вызвать событие OnCellClick ? заранее спасибо.

Двойная запись в ячейку DBGrid
Привет, этот код: R:=Rect; InflateRect(R, -2, -2); res:=DBGrid1.DataSource.DataSet.FieldByName('Цена').Index; if...

Добавить запись в выделенную ячейку DBGRID
Всем привет, разрабатываю программу электронная регистратура. Такой вопрос, как записать значение из Edit в выделенную ячейку DBGRID. Для...

Закрасить ячейку DBGrid по нажатию на кнопку
Здравствуйте! Как закрасить текущую ячейку DBGrid, на которой стоит курсор, (например, в красный цвет) по нажатию на Button1. Цвет при...

Как добавить картинку в ячейку DBGrid?
Как добавить картинку в ячейку DBGrid? Есть столбец где уже прописан путь к bmp картинке. Осталось как то вывести картинку в таблицу. Я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru