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

Вниз

Как запретить добавлять записи в DBGrid?   Найти похожие ветки 

 
madmech ©   (2009-03-22 17:38) [0]

Проблемка такова: нужно создать DBGrid (или лучше сказать, что ClientDataSet), в котором последние 2 записи нельзя будет редактировать. А все остальные предыдущие можно. То бишь программа никак не должна реагировать при щелчке по ячейкам, соотвествующим одной из 2-х последних записей. Как это реализовать?


 
KilkennyCat ©   (2009-03-22 18:18) [1]

проверять и запрещать.


 
sniknik ©   (2009-03-22 18:57) [2]

в онбефорепост сделать аборт, или возбудить полноценный ексепт.


 
KilkennyCat ©   (2009-03-23 00:43) [3]


> sniknik ©   (22.03.09 18:57) [2]

не прокатит, ибо разрешает реакциям грида на мышь.


 
Германн ©   (2009-03-23 00:52) [4]


> KilkennyCat ©   (23.03.09 00:43) [3]
>
>
> > sniknik ©   (22.03.09 18:57) [2]
>
> не прокатит, ибо разрешает реакциям грида на мышь.
>

Согласно букве топика - не прокатит. Тем более, что кроме мыши есть ещё и клавиатура. А на ней F2.
Но согласно здравому смыслу совет [2] прокатывает вполне грамотно.
А уж если учесть, что есть вопрос, но не ясна задача, то и тем более.


 
KilkennyCat ©   (2009-03-23 02:13) [5]

Хорошо, тогда перефразирую: гарантирует незапись, не решает интерфейсной части.
Хотя, вторая часть решается элементарно, как я уже и говорил: проверяем местонахождение и запрещаем редактирование, если находимся там.


 
Германн ©   (2009-03-23 02:24) [6]


> KilkennyCat ©   (23.03.09 02:13) [5]

Но
> sniknik ©   (22.03.09 18:57) [2]

проще. И естественней!


 
KilkennyCat ©   (2009-03-23 03:19) [7]

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


 
Юрий Зотов ©   (2009-03-23 19:10) [8]

> последние 2 записи

А что значит "последние 2 записи"? По какому признаку они последние?


 
KilkennyCat ©   (2009-03-24 02:16) [9]

Ну вот, пришел Зотов и все испортил...
:)


 
Amoeba ©   (2009-03-24 02:51) [10]

Ну почему испортил? Наоборот, влил свежую струю в дискуссию, а то она стала терять остроту.

P.S. Что-то автор вопроса до сих пор не вылез из укрытия. А жаль, особенно в после реплики ЮЗ.


 
Немо ©   (2009-03-24 09:26) [11]

что-то типа
procedure TForm1.DBGrid1CellClick(Column: TColumn);
procedure Quit(a:integer);
begin
 showmessage("i chego eto mi tut hotim redaktirovat?");
 case a of
   1:begin  DBGrid1.DataSource.DataSet.prior; end;
   2:begin  DBGrid1.DataSource.DataSet.prior; DBGrid1.DataSource.DataSet.prior;end;
 end;
 DBGrid1.DataSource.DataSet.EnableControls;
end;

begin
 DBGrid1.DataSource.DataSet.DisableControls;
 DBGrid1.DataSource.DataSet.Next;
 if DBGrid1.DataSource.DataSet.Eof then Quit(1);
 DBGrid1.DataSource.DataSet.Next;
 if DBGrid1.DataSource.DataSet.Eof then Quit(2);
 DBGrid1.DataSource.DataSet.prior;
 DBGrid1.DataSource.DataSet.prior;
 DBGrid1.DataSource.DataSet.EnableControls;
end;


 
Palladin ©   (2009-03-24 09:29) [12]


> P.S. Что-то автор вопроса до сих пор не вылез из укрытия.

застрял


 
MsGuns ©   (2009-03-24 09:49) [13]

>Немо ©   (24.03.09 09:26) [11]

Спрячь и никому не показывай


 
Немо ©   (2009-03-24 10:37) [14]

не по реализации а посмыслу, что не так?


 
{RASkov} ©   (2009-03-24 10:51) [15]

> [14] Немо ©   (24.03.09 10:37)

вот и описал бы словами(не программным кодом) смысл, а такую реализацию показывать не нужно....)
Ибо только показал свою безграмотность и все...


 
Немо ©   (2009-03-24 11:02) [16]

вот ведь в чем дело, смотрю, столько народу ответили, показали глубину своих знаний, пытались заставить вдуматься автора..
и практически ничем не помогли в решении 1, конкретной задачи


 
{RASkov} ©   (2009-03-24 11:15) [17]

> [16] Немо ©   (24.03.09 11:02)

А знаешь почему? Потому что вопрос не определенный... не точный.
и "две последние записи" можно трактовать по разному(по своему)...
А уж если решил наобум помочь, то помогай грамотно, а не абы как...


 
Немо ©   (2009-03-24 11:38) [18]

да понятно, что все в мире относительно, что первое может быть и последним, смотря как смотреть, но две последние записи в dbgride, по моему означают совершенно определенный смысл. А именно те, которые в наборе данных перед eof.
Вот вышел в магазин, лежит хлеб, рядом бумажка с надписью 15
Понятно, что в рублях и что в десятичной системе. Не так ли?
ps читал про "данные в гриде", помоему тут так принято на этот вопрос отвечать:)
pps да, чегой то я... Наверное, операторы задолбали :) Извините.


 
KilkennyCat ©   (2009-03-24 12:30) [19]

Предлагаю считать двумя последними записями:
a) две нижних строчки в гриде. Грид не сортируется, не фильтруется
b) две последних по времени добавленых записи в бд


 
MsGuns ©   (2009-03-24 12:35) [20]

>Немо ©   (24.03.09 11:38) [18]
>но две последние записи в dbgride, по моему означают совершенно определенный смысл. А >именно те, которые в наборе данных перед eof.

Нет, конечно. Ибо две последние записи в гриде - это 2 последние записи, которые ОТОБРАЖАЕТ грид, а вовсе не "две последние перед eof"

С датасетом тоже не все все просто :)


 
MsGuns ©   (2009-03-24 12:41) [21]

По сабжу
Прощк всего сделать следкющее:
после открытия НД проверить сколько записей в нем находится (Last,First,RecordCount)
Запомнить номер записи, у которой он на 1 меньше общего кол-ва
Написать обработчик TDataSet.AfterScroll, в котором номер текущей записи (RecNo) сравнивать с запомненным и, если не меньше, то гриду дать ReadOnly = true,  иначе - false

Хотя в целом же назначение этих манипуляций весьма мутно описано и их реализация, вероятно, будет глючной до невозможности


 
KilkennyCat ©   (2009-03-24 12:51) [22]


> "две последние перед eof"

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


 
MsGuns ©   (2009-03-24 17:07) [23]

>KilkennyCat ©   (24.03.09 12:51) [22]

см.20 последняя фраза :)



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

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

Наверх




Память: 0.52 MB
Время: 0.015 c
2-1236696921
Mishechka
2009-03-10 17:55
2009.05.03
Drag & Drop в DBGrid


2-1237261817
Drowsy
2009-03-17 06:50
2009.05.03
Update Failed


15-1236055605
Дмитрий С
2009-03-03 07:46
2009.05.03
HotKey на всех Desktop-ах.


2-1237811538
Orion
2009-03-23 15:32
2009.05.03
Full Screen Mode


2-1237265570
petvv
2009-03-17 07:52
2009.05.03
Вопрос по потокам