Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > вопрос про DBGrid


Автор: Palladin 14.4.2009, 13:55
Всем здравствуйте. Возникла проблемма, пока велосипед не изобретал, ибо надеюсь, что есть какоенить стандартное решение моей проблемы...
И так задача в данном случае такова: Есть DBGrid соединенный через ADO к таблице базы данных. Хочу избавиться от функции DBGrid.
Вообщем когда находимся в dbgride, к примеру кликнули по нему, при нажатии Tab или "стрелки вниз" создается новое пустое поле, вот именно от этого надо избавиться, ReadOnly ставить нельзя, т.к. идет обработка, отловить и заблочить так же нельзя, т.к. эти кнопки используются. Нужно отучить DBGrid от возможности создавать пустую строку...

Если кто сталкивался и решал подругому отпишите, если кто лазил в компонент и убирал это, тк же отпишите свои идеи, заранее спс, надеюсь на скорую помощь
С уважением Palladin

Автор: Akella 14.4.2009, 14:04
Palladin, уже раз 100 говорили, что работать желательно с набором данных (с датасетом), а не с гридом. Т.к. грид всего лишь отображает данные.

Добавлено через 31 секунду
Цитата(Palladin @  14.4.2009,  13:55 Найти цитируемый пост)
через ADO

а конкретнее

Автор: Palladin 14.4.2009, 14:13
простой конект таблицы аксес, во всем этом деле используется ADOConnection, ADOTable, DataSource, отображаю таблицу в DBGrid

Добавлено через 4 минуты и 30 секунд
Датасет, дак датасет, чего кричать-то я в делфи ~2 не открывал
Ну дак Акелла, там есть чтонить что можно выставить в false или еще как, чтобы пустая строка не создавалась автоматом?

Добавлено через 10 минут и 2 секунды
Мне код не надо, в крайнем случае "велосипед" сделаю, уже пару идей есть, но хочу так сказать по "человечески"

Автор: Данкинг 14.4.2009, 14:41
Цитата(Palladin @  14.4.2009,  14:55 Найти цитируемый пост)
Вообщем когда находимся в dbgride, к примеру кликнули по нему, при нажатии Tab или "стрелки вниз" создается новое пустое поле, вот именно от этого надо избавиться,

Избавляйся. ДРКБ в помощь. smile Или "Delphi World" - в общем, где-то было.

Код

procedure TForm1.DBGrid2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (Key = VK_DOWN) then
begin
  adotable.DisableControls;
adotable.Next;
if adotable.EOF then
 Key := 0
else
adotable.Prior;
adotable.EnableControls;
end;
end;



Автор: Palladin 14.4.2009, 14:45
2Данкинг как и всегда говорит кратко и понятно smile  Ок, пойду искать, найду если, то тут отпостирую

Автор: Данкинг 14.4.2009, 14:46
Palladin, я нашёл уже. smile 

Автор: Palladin 14.4.2009, 14:51
Вот что удалось найти
Код

procedure TForm1.Tbable1BeforeInsert(DataSet: TDataSet);
 begin
   Abort; 
 end;

или

 procedure TForm8.DBGrid1KeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
 begin
   if (Key = VK_DOWN) then
   begin
     TTable1.DisableControls;
     TTable1Next;
     if TTable1.EOF then
       Key := 0
     else
       TTable1.Prior;
     TTable1.EnableControls;
   end;
 end;

Сейчас пойду опробую, заодно прикручу VK_TAB

Добавлено @ 14:53
2Данкинг покажи свой пример

Добавлено через 13 минут и 1 секунду
всем ищущим http://www.delphiworld.narod.ru/_comps_.html

Автор: Kbl4AH 14.4.2009, 15:22
Код

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((Key = VK_DOWN) or ((Key = VK_TAB) and (DBGrid1.SelectedIndex = DBGrid1.Columns.Count - 1))) and 
    (ADODataSet1.RecNo = ADODataSet1.RecordCount) then
    Key := 0;
end;

Сорри, не заметил, что ADOTable используется...
Тогда нужно заменить ADODataSet1 на ADOTable1...

Автор: Данкинг 14.4.2009, 17:05
Цитата(Palladin @  14.4.2009,  15:51 Найти цитируемый пост)
2Данкинг покажи свой пример

В смысле? Смотри мой пост отредактированный. Но там примерно то же. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)