Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)

Модерирует : ShIvADeSt

ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

   

golkanavt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DevExpress

Обмен опытом, обсуждение нюансов и решение проблем возникающих при использовании библиотеки компонент Developer Express




 
Сами прирученные компоненты частенько приходят на водопой сюда
 
DLL со скинами из библиотеки dxSkins, автор Ziltoid Подробнее... линк обновлен
Продолжение, Первая часть, вторая часть

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 10:31 07-02-2009 | Исправлено: vladman, 14:36 24-10-2009
ukflrj

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
to jicoff  sldaac f3ka
 
Все ясно.
 
спасибо за участие.

Всего записей: 24 | Зарегистр. 26-01-2006 | Отправлено: 16:34 19-02-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Trasnev
ну вообще-то думаю это поможет....
 if DisplayValue='дата' then
   begin
     //OracleDataSet1.Edit; запись и так в режиме редактирования...
     OracleDataSet1.FieldValues['col1']:='AAAA';
     //OracleDataSet1.Post; фиксировать изменения надо только после OnValidate
   end;  

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 16:37 19-02-2009
Trasnev

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f3ka
спасибо. это именно оно.
Но возник следующий вопрос. а если необходимо редактирование в нескольких записях. (ввели значение в ячейку, нужно подогнать остальные значения в колонке, чтобы их сумма давала 100). если пробегать по всем записям при помощи Next, то когда нужно открывать на редактирование и когда фиксировать изменения?

Всего записей: 4 | Зарегистр. 13-02-2009 | Отправлено: 17:00 19-02-2009
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Trasnev
Я бы использовал событие OnChange поля (к которому прикручен lookup) в редактируемом DataSet.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 17:27 19-02-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
brookson

Цитата:
Но кто мне объяснит, почему  
Код:
...
работает, а
Код:
...
нет.  

 
Потомучто для колонки tvgrid1.Columns[8] вы строите и общее (для всего View) summary в Footer и summsry в group. Вот как раз в этом случае и нужно явно указывать AColumn.Summary.GroupFooterKind либо AColumn.Summary.GroupKind в зависимости от того где вы хотите отображать summary для сгруппированного столбца.
 

Цитата:
было неважно, где отображать Group Summary - внизу или вверху.

не совсем понятно что имелось ввиду "внизу или вверху". Group Summary может отображаться либо in a group row or in a group footer panel.  
 

Цитата:
Если нетрудно, как бы Вы поступили?

приблизительно так и поступаю, более подробно постараюсь показать позже..
 
а по-поводу кода - X11 уже написал что вызывает некоторую неидеальность
Но, в любом случае, как по мне, идеального кода не существует .
 
Добавлено:
Trasnev

Цитата:
если пробегать по всем записям при помощи Next,

можно пробегать не по датасету, а по DataController методом ForEachRow.
 
Более подробно - TcxCustomDataController.ForEachRow -> Example: Changing selected records in bound mode  

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 19:12 19-02-2009
sldaac



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Более подробно - TcxCustomDataController.ForEachRow -> Example: Changing selected records in bound mode  

все-бы неплохо,  но в хелпе что-то не нашел. А как проитись по строкам и изменить значение в какой-то колонке, что-бы при этом и произошли изминения в DataSet (при установленом фильтре на вьюшке). Обратное, и по строкам наити запись и изменить ее значение в DataSet тоже реализуемо. Вопрос еше  проще, как програмно в колонке  поставь Чек (CheckBox)  на все видимые строки и при этом изменились данные в DataSet.  Знаю что где-то рядом, но ХЗ
Спсб. всем.

Всего записей: 721 | Зарегистр. 15-06-2005 | Отправлено: 09:55 20-02-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sldaac, вот я из справки взял:
 

Код:
 
procedure TfmNewArrival.RecalcSelected(ARowIndex: Integer; ARowInfo: TcxRowInfo);
Var
 id:integer;
begin
  with dbgArrivalDet.DataController do begin
    //Test whether a row is a data record
    if ARowInfo.Level = Groups.GroupingItemCount then
    //unbound or provider mode
    with dm do begin
      id := Values[ARowInfo.RecordIndex, dbgArrivalDetID.Index];
      if tArrivalDet.Locate('ID',id,[]) then begin
        tArrivalDet.Edit;
 
          if tArrivalDetIS_FIXED_NACENKA.Value = true then begin
          tArrivalDetPRICE_RETAIL.AsVariant := tArrivalDetPRICE_W_VAT.AsVariant * tArrivalDetVAL_FIXED_NACENKA.Value;
        end else begin
          tArrivalDetPRICE_RETAIL.AsVariant := tArrivalDetPRICE_W_VAT.AsVariant * ceCoeff.Value;
        end;
 
 
        tArrivalDet.post;
      end;//if tArrivalDet.Locate('ID',id,[]) then begin
    end;//with dm do begin
  end;//with dbgArrivalDet.DataController do begin
end;
 

 
Обрабатываем выделенные записи

Код:
 
procedure TfmNewArrival.bRecalcSelectedClick(Sender: TObject);
begin
  with dbgArrivalDet.DataController do
  begin
    BeginUpdate;
    try
      ForEachRow(True, RecalcSelected);
    finally
      EndUpdate;
    end;
  end;
end;
 
 

 
Добавлено:
Цикл

Код:
 
     //добавляем в таблицу для экспорта видимые записи таблицы
      with dbgReklama.ViewData do begin
        for i := 0 to RecordCount-1 do begin
          if not VarIsNull(Records[i].Values[dbgReklamaID.Index]) then
            dm.SP_SET_REC_TO_EXPORT.ParamByName('IN_ID').Value := Records[i].Values[dbgReklamaID.Index];
            dm.SP_SET_REC_TO_EXPORT.ExecProc;
        end;//for
      end;//with dbgReklama.ViewData do begin
 

 
здесь по выделенным:

Код:
 
  for i := 0 to dbgReklama.ViewData.RecordCount - 1 do begin
    if dbgReklama.ViewData.Records[i].Selected then begin
      sl1.Text := G_ReplaceStr(dbgReklama.ViewData.Records[i].Values[dbgReklamaDATAS.Index], ',',#13);
      for k := 0 to sl1.Count - 1 do
        if sl1[k] <> '' then Inc(iCount);
 
    end;//if
  end;//for
 

 
тоже кусок кода по выделенные записям

Код:
 
      for i := 0 to dbgReklama.DataController.GetSelectedCount - 1 do begin
        sDatas := dbgReklama.Controller.SelectedRows[i].Values[dbgReklamaDATAS.Index];
 
 

 

Код:
 
      for i := 0 to dbgReklama.DataController.GetSelectedCount - 1 do
        with dbgReklama.Controller.SelectedRows[i] do begin
          dm.SP_SET_PNONES.ParamByName('in_id').Value := Values[dbgReklamaID.Index];
          dm.SP_SET_PNONES.ParamByName('in_phone').Value := Values[dbgReklamaPHONE.Index] + ', ' + fmSelPhones.edTel.Text;
          dm.SP_SET_PNONES.ExecProc;
        end;//with
 

 
и опять по выделенным

Код:
 
    for i := 0 to dbgReklama.ViewData.RecordCount - 1 do begin
      if dbgReklama.ViewData.Records[i].Selected then begin
        sID := IntToStr(dbgReklama.ViewData.Records[i].Values[dbgReklamaID.Index]);
        DM.dbJDN.Execute('execute procedure SP_SET_EXPIREDATE_TOMORROW('+ sID + ')');
      end;
    end;
 


----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 10:55 20-02-2009
sldaac



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
 
это я видел, это не то что мне надо
есть  вьюшка  в ней колонка ChecxBo,  мышкой можно на записи  поставить-снять чек (почекать). При этом изменятся данные для этого поля в DataSet,  
Задача, на форме есть кнорка, при клике на ней, должны все записи прочекаться или сняться чек. при этом должны измениться и данные в DataSet. Повторюсь,  вообще не затрагивая DataSet, как будто на чекали по записям  мышкой.  
Выделеные записи это одно,я говорю про видимые, установлен фильтр на вьюшке
 
А в этом примере используется tArrivalDet.Locate('ID',id,[]) поиск записи.  
 
 
Добавлено:
to X11   вот самый простой вариант,  но опять-же с поиском в DataSet
 
 
for yyy := 0 to (GV_EML.ViewData.RecordCount-1)  do
begin
  ARow :=GV_EML.ViewData.Rows[yyy];
kkk:= ARow.Values[GV_EMLID.Index];
dm:=  ARow.Values[GV_DM.Index];
if DS_QEml.DataSet.Locate('id; dm',VarArrayOf([kkk,dm]), [loCaseInsensitive,loPartialKey]) = true then
begin
DS_QEml.DataSet.Edit;
if DS_QEml.DataSet.FieldByName('chbx').AsInteger=0 then
  DS_QEml.DataSet.FieldByName('chbx').AsInteger:=1 else
  DS_QEml.DataSet.FieldByName('chbx').AsInteger:=0;
end;
end;

Всего записей: 721 | Зарегистр. 15-06-2005 | Отправлено: 11:12 20-02-2009 | Исправлено: sldaac, 11:19 20-02-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не забывай про DisableControls или BeginUpdate
 

Цитата:
Повторюсь,  вообще не затрагивая DataSet,  

т.е. ты чекаешь чекбоксы, а данные в датасете не должны меняться?
Есть свойство: DataController.options, там есть dcoImmediatePost. У колонки также есть такое свойство. Хотя странное у тебя желание. Ведь грид, связан с набором данных. И направлен заведомо на то, что если в гриде что-то меняется, то и в наборе данных тоже.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:22 20-02-2009 | Исправлено: X11, 12:33 20-02-2009
sldaac



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Не забывай про DisableControls или BeginUpdate

это  есть я не привел весь код

Цитата:
т.е. ты чекаешь чекбоксы, а данные в датасете не должны меняться?

да  должны,  изменились данные в гриде, и автоматом в датасет, а не делать поик по ID, и в датасет менять значение.
 
 
 

Всего записей: 721 | Зарегистр. 15-06-2005 | Отправлено: 12:50 20-02-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sldaac, ты меня запутал... в чём тогда проблема? По идее если что-то меняешь в гриде, то в датасете это тоже меняется.
 
А у тебя НЕ меняется?

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 16:22 20-02-2009
Trasnev

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
afiget, vladman
Спасибо за ответы.

Всего записей: 4 | Зарегистр. 13-02-2009 | Отправлено: 16:58 20-02-2009
sldaac



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
По идее если что-то меняешь в гриде, то в датасете это тоже меняется.  
 
А у тебя НЕ меняется?

Да  если  меняеш через  интерфей,  тот-же  чек, мышкой чек-унчек - все работате.
Мне  надо  что-бы нажав на конопку на форме,  у  меня  почекались или снялся чек на всех видимых записях в гриде, как будто я каждую прочекам мышкой. При этом в коде (Onclick)  не использовать DataSet

Всего записей: 721 | Зарегистр. 15-06-2005 | Отправлено: 17:22 20-02-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sldaac
а использовать Values у видимых записей датаконтроллера не получается?
или EditValue как нить установить?

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 17:32 20-02-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sldaac
 

Цитата:
for yyy := 0 to (GV_EML.ViewData.RecordCount-1)  do

Пробежит не по ВСЕМ ВИДИМЫМ записям во View, а по ВСЕМ В ПРИНЦИПЕ, т.е. по ВСЕМ попавшим в него из DataSet. Нужно помнить, что может быт применен фильтр, и тогда ВСЕ ВИДИМЫЕ <> ВСЕ.
Для ВСЕ ВИДИМЫЕ нужно использовать <YourView>.DataController.FilteredRecordCount-1
 
Уточнение
Цитата:
не использовать DataSet
не использовать из-за его видимости в этом обработчике или не использовать его методы в принципе?
Если первое - то можно воспользоваться <YourView>.DataController.Datasource.Dataset.
Если второе хотелось бы уточнить причину.
f3ka прав, можно воспользоваться <YourCheckBoxTcxGridDBColumn>.Value := 1 для check и <YourCheckBoxTcxGridDBColumn>.Value := 0 для unchek
А затем <YourView>.DataController.Post().  
Но нужно учитывать, что

Цитата:
 When a different record is focused, the data controller's Post method is called implicitly.
Note:   Do not call the Post method within the BeginUpdate/EndUpdate and BeginFullUpdate/EndFullUpdate blocks.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 18:46 20-02-2009 | Исправлено: vladman, 19:07 20-02-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дык нужно место Records использовать Rows
 
Добавлено:
У ViewData есть Rows
 
Добавлено:
По этой ссылке и вниз по страничке (может натолкнёт на правильную мысль)
http://forum.ru-board.com/topic.cgi?forum=33&topic=7918&start=1100#13
 
 
и ещё немного
http://www.automatedqa.com/community/Home/Articles/tabid/38/articleType/ArticleView/articleId/576/Default.aspx
 
https://community.devexpress.com/forums/t/52521.aspx
 
 
Добавлено:
Ну и погуглить можно на тему: ViewData Rows

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 22:23 20-02-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11

Цитата:
Дык нужно место Records использовать Rows  

Если это по-поводу видимых записей, то как раз именно Records, чтобы потом не проверять является ли очередная Row записью таблицы (Data Row), либо строкой группирвки (Group Row), либо Filter Row, либо New Item Row.... Изменять значение чекбокса с последующий записью значения в таблицу БД находясь на Group Row, Filter Row, New Item Row думаю не совсем будет правильно.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 00:44 21-02-2009
VitOs2

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помочь в следующем вопросе.
Есть БД. Есть грид с cxGridDBBandedTableView. Нужно отображать данные в таблице. При обрыве связи таблица должна работать в "офлайн" режиме. То-есть, продолжать отображать данные.  
Сейчас реализация следующая:
Для того чтобы не пропадали данные из таблицы (нужны только для просмотра) при обрыве связи, я использую промежуточный TdxMemData с методом LoadFromDataSet(мой датасет) и подставляю его как источник данных для вьшки.
Дело в том, что, если данных много (у меня их может быть много), то двойное (а мне кажется, тройное) заполнение источников данных занимает довольно много времени.
1-й раз я закачиваю данные с сервера в свой датасет, потом в MemData и 3-й, если я правильно понял, в Datacontroller вьюшки.  
Так вот, вопрос. Можно ли перекинуть данные с моего источника днанных сразу в DataСontroller вьюшки и использовать данные в офлайн режиме?
В помощи говорится про Unbound и про Provider режимы. Которые можна использовать для не DB вьюшек. Но я так и не понял как закидывать туда данные.
 
Может кто что посоветовать?
 
Спасибо!

Всего записей: 54 | Зарегистр. 18-03-2008 | Отправлено: 11:30 22-02-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А если загружать всё прямо в грид, т.е. грид использовать как стринг-грид?

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:43 22-02-2009
infomSB



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VitOs2
А что собственно понимается под обрывом связи, ведь если ты используешь стандартный способ Connection-DataSet-TableView то подключение к БД нужно только для начальной загрузки данных. Или понимается что Connection ставиться в Connected:=False, может возможно просто убрать свойство KeepConnection (помоему так называется) и тогда продолжает ли существовать соединение после загрузки данных тебя не будет волновать в принципе.

Всего записей: 75 | Зарегистр. 17-03-2006 | Отправлено: 14:11 22-02-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)
ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru