Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2011, 22:10   #1
Blood_ghosT
Пользователь
 
Регистрация: 29.07.2011
Сообщений: 92
По умолчанию Выделение несколько строк в DBGrid

Доброго времени форумчане!!
Не подскажите как реализовать выделение несколько строк с помощью мыши DBGrid и выделенные строки копировать в другой DBGrid!
MultiSelect работает только с клавиатурой, сам не могу решить данную проблему!Именно надо с помощью мыши!!
За ранее спасибо!
Blood_ghosT вне форума Ответить с цитированием
Старый 04.12.2011, 22:29   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Клавиша Ctrl и левая кнопка мыши. При вставке выделенных записей в другой грид используйте свойство SelectedRows первого грида
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.12.2011, 23:24   #3
Blood_ghosT
Пользователь
 
Регистрация: 29.07.2011
Сообщений: 92
По умолчанию

А ни как нельзя без участия клавиатуры. Например на неделю клава не работает и придется работать только при помощи мыши!!И желательно без сторонних компонентов!

Вот код:
Код:
procedure TfrmWarehouse.Button1Click(Sender: TObject);
var
  i, j: Integer;
  s: string;
begin
  if dbgfrmWarehouse.SelectedRows.Count>0 then
    with dbgfrmWarehouse.DataSource.DataSet do
      for i:=0 to dbgfrmWarehouse.SelectedRows.Count-1 do
      begin
        GotoBookmark(pointer(dbgfrmWarehouse.SelectedRows.Items[i]));
        for j := 0 to FieldCount-1 do
        begin
          if (j>0) then s:=s+', ';
          s:=s+Fields[j].AsString;
        end;
        Listbox1.Items.Add(s);
        s:= '';
      end;
end;
Но к сожаления я не смог применить данный код на DBGrid и на мышь, уже голова не варить!
Помогите пожалуйста!
Blood_ghosT вне форума Ответить с цитированием
Старый 05.12.2011, 00:26   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Мышью вы выделяте. Как без Ctrl не знаю. Чем Button не подходит? Выделили, той же мышью Button кликнули. С GotoBookmark правильно сделали. Записывать данные нужно в DataSet второго грида - вставить запись (Append), поместить в поля данные из полей записи исходного DataSet и Post.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.12.2011, 10:24   #5
Blood_ghosT
Пользователь
 
Регистрация: 29.07.2011
Сообщений: 92
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Мышью вы выделяте.
Мышью я выделяю только одну строчку. Я бы хотел как и в ListBox когда поставишь галочку на MultiSelect! Выделяешь первую строчку и тяни до последний и ты выделишь все строчки. Точно так же я и хотел!!

Цитата:
Чем Button не подходит? Выделили, той же мышью Button кликнули. Записывать данные нужно в DataSet второго грида - вставить запись (Append), поместить в поля данные из полей записи исходного DataSet и Post.
Button останется, я хотел как и в первом примере вставка в ListBox переменной s! Чтобы все что храниться в s вставить в DBGrid1. А насчет (Append) я это знал но просто надо будет прописывать все строчки и получиться большой код!!
Но все равно Спасибо!

Вот код:

Код:
procedure TfrmWarehouse.Button1Click(Sender: TObject);
var
  i, j: Integer;
  s: string;
begin
  if dbgfrmWarehouse.SelectedRows.Count>0 then
    with dbgfrmWarehouse.DataSource.DataSet do
      for i:=0 to dbgfrmWarehouse.SelectedRows.Count-1 do
      begin
        GotoBookmark(pointer(dbgfrmWarehouse.SelectedRows.Items[i]));
       { for j := 0 to FieldCount-1 do
        begin
          if (j>0) then s:=s+', ';
          s:=s+Fields[j].AsString;
        end;}
        DBgrid1.DataSource.DataSet.Append;
        DBgrid1.DataSource.DataSet.FieldByName('Idtovar').AsInteger:=dbgfrmWarehouse.DataSource.DataSet.FieldByName('Idtovar').AsInteger;
        DBgrid1.DataSource.DataSet.FieldByName('Naimenov').AsString:=dbgfrmWarehouse.DataSource.DataSet.FieldByName('Naimenov').AsString;
        DBgrid1.DataSource.DataSet.Post;
        //Listbox1.Items.Add(s);
        //s:= '';
      end;
end;
И я попробывал без этого участка кода вроде все работает получаеться он лишний??
Код:
{ for j := 0 to FieldCount-1 do
        begin
          if (j>0) then s:=s+', ';
          s:=s+Fields[j].AsString;
        end;}
И еще мне пришлось создать таблицу и к ней подключит ADOQuery=>DataSource! Без этого код не работал! Может я неправильно сделал!
И я бы хотел что бы ADOQuery просто хранил в себе выполненный запрос без подключения к какой либо таблице!
Blood_ghosT вне форума Ответить с цитированием
Старый 05.12.2011, 11:03   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
И я бы хотел что бы ADOQuery просто хранил в себе выполненный запрос без подключения к какой либо таблице!
В качестве DataSet второго грида можно использовать в таком случае TClientDataSet. В дизайне набросать в него фиелдов и активизировать метом CreateDataSet. Будет работать без всякой привязки к СУБД.
Цитата:
Я бы хотел как и в ListBox когда поставишь галочку на MultiSelect! Выделяешь первую строчку и тяни до последний и ты выделишь все строчки.
Скорее всего возможно, но прийдется конкретно разобраться с внутренностями DBGrid, переопределить его методы, реализовать свои обработчики сообщений винды. Короче заморочка еще та, никогда не задавался такой целью
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 05.12.2011 в 12:01.
Аватар вне форума Ответить с цитированием
Старый 05.12.2011, 11:13   #7
Blood_ghosT
Пользователь
 
Регистрация: 29.07.2011
Сообщений: 92
По умолчанию

Спасибо за помощь Аватар!!!!
Blood_ghosT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про выделение строк в DBGrid RamireZ БД в Delphi 0 03.12.2009 17:40
Выделение записей в DBGrid (многопользовательский вариант ) Paul Hindenburg БД в Delphi 14 29.09.2009 10:19
выделение строк ruavia3 Microsoft Office Excel 2 26.08.2009 13:36
Выделение ячейки в DBGrid правой кнопкой мыши RIO БД в Delphi 2 20.08.2009 17:53
Выделение цветом нужных строк таблицы DBGrid XFilippowX Общие вопросы Delphi 4 16.02.2009 10:02