Форум: "Начинающим";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];
ВнизВопрос по DBGrid Найти похожие ветки
← →
b@v © (2009-01-15 08:05) [0]Как узнать программно в ячейке какого столбца я клякнул. Нужно клякнуть в нужной ячейке и при этом отработало нужное событие
← →
031178 (2009-01-15 08:07) [1]procedure TFrame1.DBGrid1CellClick(Column: TColumn);
begin
if Column.ID = 5 then ...................................
← →
b@v © (2009-01-15 08:25) [2]Если так то он постоянно выдает одно и тоже число, т.е. количество колонок
← →
alshtam (2009-01-15 08:35) [3]объявляеш
TFDBGrid = class (TDBGrid);
теперь
колонка selcol:=Tfdbgrid(GoodsAndCategoriesDBGrid1).Col;
столбец selrow:=Tfdbgrid(GoodsAndCategoriesDBGrid1).Row;
координаты r:= Tfdbgrid(DBGrid1).CellRect(selcol,selrow);
где r:Trect;
← →
alshtam (2009-01-15 08:36) [4]пардон
объявляеш
TFDBGrid = class (TDBGrid);
теперь
колонка selcol:=Tfdbgrid(DBGrid1).Col;
столбец selrow:=Tfdbgrid(DBGrid1).Row;
координаты r:= Tfdbgrid(DBGrid1).CellRect(selcol,selrow);
где r:Trect;
← →
b@v © (2009-01-15 08:40) [5]
> alshtam
Это, что компонент какой то ?
← →
b@v © (2009-01-15 08:41) [6]Мне надо например, клякнул в ячейке в любой (даже не в любой, а именно в одном столбике, в любой ячейке) и значение этой ячейки положить в переменную.
← →
alshtam (2009-01-15 08:43) [7]нет просто в предках TDBGrid прописаны col и row но они в protected объявлением TFDBGrid = class (TDBGrid); ты их вытаскиваеш и можеш пользоваться
← →
alshtam (2009-01-15 08:44) [8]ну вот procedure TFrame1.DBGrid1CellClick(Column: TColumn); обрабатывай узнавай куда кликнул и делой что хош дальше
← →
b@v © (2009-01-15 08:48) [9]
> alshtam
че то запутался, на примере не подскажешь ? Не разу так не делал, понять не могу !!!! Заранее спасибо
← →
alshtam (2009-01-15 08:54) [10]чтоб значение из DBGrid забрать не нужно узнавать куда кликнул. цепляеш dataset через него забераеш выбранную запись
← →
b@v © (2009-01-15 08:56) [11]
> alshtam
А чем отличается колонка и столбец ?
← →
alshtam (2009-01-15 09:02) [12]ткнул в грид выбралась строка. у dataset спрашиваеш значение конкретного столбца() по названию.
i:integer;
i:=DataSeе1.FieldByName("A").Asinteger
возьмет значение из поля "A" выделеной записи
← →
MsGuns © (2009-01-15 09:06) [13]>alshtam (15.01.09 08:54)
Зачем чесать левое ухо правой пяткой ?
← →
b@v © (2009-01-15 09:08) [14]
> ткнул в грид выбралась строка. у dataset спрашиваеш значение
> конкретного столбца() по названию.
> i:integer;
> i:=DataSeе1.FieldByName("A").Asinteger
> возьмет значение из поля "A" выделеной записи
Это я могу клякнуть в любом месте и он даст мне нужное значение, это понятно, а мне надо чтобы именно кляк срабатывал над нужным столбиком, а не над всей записью !!! Ну, представь, есть колонка, там запись, ее значение "ФОТО", что то типа ссылки, клякнули на "ФОТО" и пошли смотреть фото
← →
alshtam (2009-01-15 09:12) [15]тогда делай как в 4,потом делай проверку что row=n где n номер нужного столбца бери значение из этого поля и пошли смотреть фото
← →
alshtam (2009-01-15 09:13) [16]
> Зачем чесать левое ухо правой пяткой ?
Уважаемый, предложите свой вариант, лутше, и я может поучусь!:)
← →
MsGuns © (2009-01-15 09:28) [17]>Уважаемый, предложите свой вариант, лутше, и я может поучусь!:)
ДБгрид имеет собственные средства для решения сабжевой задачи. Например, SelectedField, SelectedIndex, TColumn.Field, OnColEnter/Exit и т.д. см. справку
Предложенный Вами "крякающий" подход используют только тогда, когда собственных публичных фич не хватает. Например, если надо определить чисто "географичесчкие" вещи: порядковый номер текущей строки сетки относительно первой видимой, кол-во видимых строк (колонок), индекс первой или последней видимой колонки и т.д.
← →
Сергей М. © (2009-01-15 09:31) [18]
> b@v
procedure TFrame1.DBGrid1CellClick(Column: TColumn);
begin
if DBGrid1.SelectedField.FieldNo = 1 then
ShowMessage(TStringField(DBGrid1.SelectedField).Value);
← →
b@v © (2009-01-15 09:46) [19]
> procedure TFrame1.DBGrid1CellClick(Column: TColumn);
> begin
> if DBGrid1.SelectedField.FieldNo = 1 then
> ShowMessage(TStringField(DBGrid1.SelectedField).Value);
>
Получается, что в каком бы месте грида мы не клякнули, он выдает первое значение первого поля
← →
Сергей М. © (2009-01-15 10:08) [20]Не получается.
← →
Плохиш © (2009-01-15 10:53) [21]
> b@v © (15.01.09 08:41) [6]
>
> Мне надо например, клякнул в ячейке в любой (даже не в любой,
> а именно в одном столбике, в любой ячейке) и значение этой
> ячейки положить в переменную.
В ячейках DBGrid никаких значений нет.
← →
MsGuns © (2009-01-15 11:15) [22]>Сергей М. © (15.01.09 09:31) [18]
>procedure TFrame1.DBGrid1CellClick(Column: TColumn);
>begin
>if DBGrid1.SelectedField.FieldNo = 1 then
> ShowMessage(TStringField(DBGrid1.SelectedField).Value);
with Column.Field do
ShowMessage(FieldName+": """+AsString+"""");
← →
b@v © (2009-01-15 11:25) [23]
> В ячейках DBGrid никаких значений нет.
Ну, хорошо, нету, что к словам то придираться, не значение а отображение данных.
← →
MsGuns © (2009-01-15 11:26) [24]>Как узнать программно в ячейке какого столбца я клякнул.
SelectedIndex
>Нужно клякнуть в нужной ячейке
SelectedIndex := <Индекс "нужного" стоблца>
SelectedField := DataSource.DataSet.FieldByName("<Имя "нужного" поля>)
>и при этом отработало нужное событие
procedure TFram1.TDBGridCellClick(Column: TColumn);
begin
if Column.Index=<Нужный номер> then
или
if Column.Field.FieldName=<Нужное поле> then
...
end
Но все перечисленное касается только ТЕКУЩЕЙ строки сетки и ТЕКУЩЕЙ записи датасета
Если ПРОГРАММНО нужно "встать" на "ячейку", расположенную не в ТЕКУЩЕЙ строке, то
предварительно надо изменить АКТИВНУЮ запись датасета методами датасета (First,Next,Prior,Last,Locate...) При этом "клик" на ячейке произойдет автоматически со всеми соотв. событиями
← →
MsGuns © (2009-01-15 11:28) [25]>b@v © (15.01.09 11:25) [23]
>Ну, хорошо, нету, что к словам то придираться, не значение а отображение данных.
Для кого писано [17] ?
← →
b@v © (2009-01-15 11:35) [26]
> Для кого писано [17] ?
>
> Плохиш © (15.01.09 10:53) [21]
>
>
> > b@v © (15.01.09 08:41) [6]
> >
> > Мне надо например, клякнул в ячейке в любой (даже не в
> любой,
> > а именно в одном столбике, в любой ячейке) и значение
> этой
> > ячейки положить в переменную.
>
> В ячейках DBGrid никаких значений нет.
← →
b@v © (2009-01-15 11:39) [27]
> if Column.Field.FieldName=<Нужное поле> then
Все равно выдает только наименование первого поля, где бы я не клякнул, а мне нужно в переменной отобразить данные, по которым я клякнул.
Но все равно спасибо за помошь !!!
← →
MsGuns © (2009-01-15 11:40) [28]Сделайте как в [22]
← →
MsGuns © (2009-01-15 11:41) [29]Блин, выкиньте dgRowSelect из Options грида :)
← →
b@v © (2009-01-15 11:47) [30]
> MsGuns © (15.01.09 11:41) [29]
Блин, спасибо, а то бьюсь, не могу понять в чем дело !!! Спасибо !!!
← →
b@v © (2009-01-15 11:50) [31]Еще бы вот курсор поменять над этим столбиком :-) А то не понятно, что там можно клякнуть :-)
← →
Сергей М. © (2009-01-15 12:29) [32]Поменяй. Что-то мешает ?
← →
b@v © (2009-01-15 12:40) [33]
> Поменяй. Что-то мешает ?
Ага, мешает, нет свойства курсора у нужного столбика !!!!
← →
Сергей М. © (2009-01-15 13:06) [34]Зато оно есть у любого объекта-наследника TControl, каковым в т.ч. является объект TDBGrid, а также у глобального объекта Screen.
← →
MsGuns © (2009-01-15 14:38) [35]Если курсор нужно менять когда мышь находится над "нужным" столбиком, то надо написать обработчик OnMouseMove, в котором определять координаты мыши, сравнивать их с координатами границ столбика и менять "гридный" курсор на "пальчик", например :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.005 c