Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Пара вопросов по DBGrid


Автор: Mpak 23.4.2007, 20:14
Как получить данные из определенного столбца. Могу получить только значение из полю в фокусе. Но не знаю как перерать.
Например:

У меня есть такие столбцы:
Код

+----------+-----+--------+
| Название | Тип | Размер |
+----------+-----+--------+
|          |     |        |
|          |     |        |
|          |     |        |


И мне надо вывести в файл (f.e. *.txt) список названий. И взять их из DBGrid, а не из самой БД smile

Второй вопрос скроллинг.
Как сделать так, чтобы фокус не бегал от колесика мыши, а прокручивался весь список? smile

Автор: Grom 24.4.2007, 00:11
Цитата

И мне надо вывести в файл (f.e. *.txt) список названий. И взять их из DBGrid, а не из самой БД 


ну если коротко

Код

DBGrid1->DataSource->DataSet->Next(); //делаем следующюю запись активной (в фокусе) так же есть функции Last,Prev
Form_Main->DBGrid2->Fields[0]->AsString //читаем тест в первой калонке текущей записи


ну вот. ставишь это байду в цикл и прогоняешь по всем строкам и записываешь в массив и в файл. короче смысл понял ;)

PS не понял что значит из самого дбгрид а не из бд. ну помоему мой вариант тебе подойдет.

Автор: Rodman 24.4.2007, 12:04
Цитата(Mpak @  23.4.2007,  19:14 Найти цитируемый пост)
Как сделать так, чтобы фокус не бегал от колесика мыши, а прокручивался весь список? 

Код

Form_Main->DBGrid2->DataSet->First;
while (!Form_Main->DBGrid2->DataSet->EOF)
{
   st->Add(Form_Main->DBGrid2->Fields[0]->AsString);  //st - типа TStringList
   DBGrid1->DataSource->DataSet->Next(); 
}
 st->SaveToFile('1.txt');


кажется так...

Автор: Mpak 25.4.2007, 18:42
Grom, Спасибо smile Все понял
Rodman, А вот с вопросом про прокрутку не совсем разобрался... По-моему, Вы на первый же вопрос и ответили ))
А не по прокрутке smile
Или я вопрос не правильно поставил...

Автор: Rodman 26.4.2007, 08:47
Mpak, как я это понял, тебе нужно видеть что записи по порядку обрабатываются!!!
Вот как я написал:
- первую запись делаем текущей;
- и перебираем все поочереди пока не закончатся, курсор в это всемя будет перемещаться на текущую запись...

Вот так я поня...

Автор: SkyHawk 26.4.2007, 11:26
Не понятен вопрос про скроллинг.

Автор: IgorDV 26.4.2007, 15:11
Есть еще такая проблемма с DBGrid-ом, когда колесиком мышки прокручиваю, выделение гуляет по гриду, а запись текущей не становиться! Какие есть предложенияя по решению данной проблеммы!?

Автор: fish9370 27.4.2007, 20:52
Цитата(Mpak @ 23.4.2007,  20:14)
Второй вопрос скроллинг.
Как сделать так, чтобы фокус не бегал от колесика мыши, а прокручивался весь список? smile

для решения данной проблемы проще всего перейти на BDS 2006, там скроллинг в DBGrid уже реализован.. если ты пишешь в более ранних версиях, например Borland C++ Builder 6, то решить проблему можно следующим образом:

на форму кидается компонент нечто вроде TScrollbar (только он должен поддерживать событие OnMouseWheel).. дальше создается обработчик того самого OnMouseWheel, например:

Код

void __fastcall TForm1::LMDScrollBar1MouseWheel(TObject *Sender,
      TShiftState Shift, int WheelDelta, TPoint &MousePos, bool &Handled)
{
  if(WheelDelta<0) DataSource1->DataSet->Next();
  else DataSource1->DataSet->Prior();
  LMDScrollBar1->Position=DataSource1->DataSet->RecNo;
}


и взаключении, любой щелчек по DBGrid должен передавать фокус твоему скроллбару..

Код

void __fastcall TForm1::DBGrid1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  if(LMDScrollBar1->Visible)
    Form1->FocusControl(LMDScrollBar1);
}


в примере был использован компонент LMDScrollbar
http://www.lmdtools.com/

Автор: Mpak 30.4.2007, 01:23
fish9370, Вы меня правильно поняли. Вот только без компонента LMDScrollBar никак нельзя?

Автор: fish9370 30.4.2007, 10:46
Цитата(Mpak @ 30.4.2007,  01:23)
Вот только без компонента LMDScrollBar никак нельзя?

думаю это возможно, но тогда придется создать наследника TScrollbar, в котором нужно реализовать обработку события OnMouseWheel.. без обработки этого события уж точно никак нельзя.. я подсказал легкий способ..

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