Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
11-1200013102
Pilligrim
2008-01-11 03:58
2009.05.03
TreeView


2-1237442197
vat
2009-03-19 08:56
2009.05.03
KeyPress


2-1237280245
Mozgan
2009-03-17 11:57
2009.05.03
Два события на одну кнопку


2-1237538453
igorntk
2009-03-20 11:40
2009.05.03
Уникальные поля в DBase


4-1208928035
AlexK
2008-04-23 09:20
2009.05.03
TSWStringArray (LPWSTR)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский