Форум: "Начинающим";
Текущий архив: 2009.05.03;
Скачать: [xml.tar.bz2];
ВнизКак запретить добавлять записи в 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c