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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



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

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




 
DLL со скинами из библиотеки dxSkins, автор Ziltoid Подробнее... линк обновлен
Продолжение, Первая часть, вторая часть, третья часть

Полезные утилиты:
DxAutoInstaller v2.1.10 Простой и удобный тул для установки девок из исходников
https://mega.nz/#!aJRQzSqI!N7RgfcG1tfF45Z3OgcmBDHT_ZcWlIgJQ5eHHgQ9VupE

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:48 31-12-2009 | Исправлено: G787, 21:12 29-07-2018
Marcello_TLT

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В TcxPivotGrid добавляю записи через AppendRecord из датасета в событии AfterOpen. Поскольку добавление записей происходит в несколько этапов, то вижу, что число записей в гриде (DataController.RecordCount) увеличивается. Но после завершения этапов грид почему-то остается пустым. Ни в одном поле ничего нет. Все фильтры состоят из двух строк: (Show All) и пустая строка. Поля созданы в дизайнтайме. Заполнение происходит так:

Код:
     
DataSet.First;
with PivotGrid.DataController do
begin
  while not DataSet.Eof do
  begin
  AppendRecord;
  vRowId := RecordCount - 1;
  Values[ vRowId, FieldIndexByName( 'dc_date_p' ) ] := DataSet.FieldValues[ 'dc_date' ];
 

Поиск индекса поля происходит так:

Код:
 
function FieldIndexByName( xName : String ) : Integer;
var
  i : Integer;
begin
  Result := 0;
  for i := 0 to PivotGrid.FieldCount - 1 do
  begin
    if PivotGrid.Fields[i].Name <> xName then continue;
    Result := PivotGrid.Fields[i].Index;
    exit;
  end;
end;
 

Но, думаю, что проблема не в индексе, т.к. прямое указание "Values[ vRowId, 0 ] := ..." тоже не заполняет грид. В чем может быть дело ?
 
Добавлено:
Отвечаю сам себе. Почему-то перед добавлением записей слетает DataBinding со всех полей. Приходится перед первым открытием датасета снова устанавливать каждое поле вот так:
Код:
dc_date_p.DataBinding.ValueTypeClass := TcxDateTimeValueType;

 
Добавлено:
Мда. Совсем ступил. В дизайнтайме поля создал, а DataBinding у полей установить забыл...

Всего записей: 18 | Зарегистр. 28-12-2012 | Отправлено: 01:44 28-01-2013
reenoip



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

Код:
procedure TForm1.cxComboBox1PropertiesDrawItem(AControl: TcxCustomComboBox;
  ACanvas: TcxCanvas; AIndex: Integer; const ARect: TRect;
  AState: TOwnerDrawState);
begin
  if AControl.Properties.Items[AIndex] = '-' then
    ACanvas.FillRect(ARect, clWindowText)
  else
  begin
    ACanvas.DrawTexT(AControl.Properties.Items[AIndex], ARect, 0);
  end;
end;
 
procedure TForm1.cxComboBox1PropertiesMeasureItem(
  AControl: TcxCustomComboBox; AIndex: Integer; ACanvas: TcxCanvas;
  var AHeight: Integer);
begin
  if AControl.Properties.Items[AIndex] = '-' then
    AHeight := 1;
end;

 
 
Только в этом коде один косяк: когда курсор мыши на строке - текст в этой строке становится нечитабельным, а это очень критично для меня, только я не знаю, к сожалению, как это можно подправить. Может кто-нибудь помочь отредактировать код в нужном направлении?
 
 
 
 
Добавлено:
Короче, подглядел код у eddoc и методом тыка добавил в нужное место такую строку: ACanvas.Font.Color:=clBlack
 
В итоге получилось так:
 

Код:
procedure TForm1.cxComboBox1PropertiesDrawItem(AControl: TcxCustomComboBox;
  ACanvas: TcxCanvas; AIndex: Integer; const ARect: TRect;
  AState: TOwnerDrawState);
begin
ACanvas.Font.Color:=clBlack;
  if AControl.Properties.Items[AIndex] = '-' then
    ACanvas.FillRect(ARect, clWindowText)
  else
  begin
    ACanvas.DrawTexT(AControl.Properties.Items[AIndex], ARect, 0);
  end;
end;
 
procedure TForm1.cxComboBox1PropertiesMeasureItem(
  AControl: TcxCustomComboBox; AIndex: Integer; ACanvas: TcxCanvas;
  var AHeight: Integer);
begin
  if AControl.Properties.Items[AIndex] = '-' then
    AHeight := 1;
end;

Теперь оно пашет прям как надо. Только правильный ли это способ - хз.
 
Добавлено:
Блин, нет, я поспешил: теперь пропала синяя полоска выделения строки (когда курсором выбираешь из списка). Вот же геморрой...

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 07:46 28-01-2013 | Исправлено: reenoip, 08:01 28-01-2013
reenoip



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

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 14:20 28-01-2013 | Исправлено: reenoip, 15:17 28-01-2013
makz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip
procedure TForm1.cxComboBox1PropertiesDrawItem(AControl: TcxCustomComboBox;
  ACanvas: TcxCanvas; AIndex: Integer; const ARect: TRect;
  AState: TOwnerDrawState);
begin
  if AControl.Properties.Items[AIndex] = '-' then
    ACanvas.FillRect(ARect, clWindowText)
  else
  begin
    if odSelected in AState then begin
      ACanvas.FillRect(ARect, clBlue);
      ACanvas.Font.Color:=clWhite;
    end
    else
    begin
      ACanvas.FillRect(ARect, clWhite);
      ACanvas.Font.Color:=clBlack;
    end;
   ACanvas.DrawTexT(AControl.Properties.Items[AIndex], ARect, 0);
  end;
end;

Всего записей: 1034 | Зарегистр. 17-05-2003 | Отправлено: 18:30 28-01-2013
reenoip



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

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 07:06 29-01-2013
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А cxGrid поддерживает ZoomIn / ZoomOut? А то колонок - тьма, хотелось бы, чтобы у пользователя была возможность увеличивать/уменьшать масштаб грида.

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 18:13 31-01-2013
marser

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

Цитата:
А cxGrid поддерживает ZoomIn / ZoomOut? А то колонок - тьма, хотелось бы, чтобы у пользователя была возможность увеличивать/уменьшать масштаб грида.

Нет, не поддерживает. Уменьшайте или увеличивайте размер шрифта и пропорционально изменяйте ширину колонок. Высота строк изменится автоматом.

Всего записей: 398 | Зарегистр. 29-03-2007 | Отправлено: 20:17 31-01-2013
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ок, понятно, спасибо, буду знать.  
 
 
 
 
 
 
 
А как реализовать в cxGrid независимый от регистра поиск по всем видимым колонкам? Т.е. проще говоря нужен некий аналог Ctrl+F: на форме есть Edit + cxGrid, при теста вводе в Edit, к примеру "нов", моментально отсеять ненужное и отобразить только содержащие эти три буквы строки (т.е. в колонке "ФИО" останутся только "Иванов", "Новиков", "Голованов", и т.д., в колонке "Профессия" останутся только "Специалист по внедрению инновационных технологий", и т.п.).
 
 
p.s.
Поиски и вдумчивое чтение на эту тему в официальном ЦП, увы, не помогло. Но, может, тут кто-то уже сделал подобное.
 
Добавлено:
Искал так и так. Может, фильтровал неверно? Просто как-то маловероятно, что мне первому понадобился такой поиск.

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 09:28 01-02-2013 | Исправлено: reenoip, 09:30 01-02-2013
BlackVetal



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
reenoip
не знаю как в делфи компоненты девок, вот девки под VS - там есть AdvBandedGridView: позволяет вывести в несколько строк одну запись (как раз когда целая куча колонок) и еще разбить эти колонки по группам

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 09:51 01-02-2013
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно, я не совсем точно раскрыл свой вопрос, за что приношу свои извинения. Минут через 10-15 опубликую в картинках, для уточнения.

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 09:56 01-02-2013
makz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip
Это называется "фильтр", а не поиск.

Всего записей: 1034 | Зарегистр. 17-05-2003 | Отправлено: 10:00 01-02-2013
reenoip



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

 
Добавлено:
Т.е. мне нужен некий "глобальный фильтр"? Ок, тогда буду искать такой. Спасибо.

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 10:06 01-02-2013
makz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip
Ну "глобального" нет в природе, но сделать, пожалуй не слишком сложно. Только вот какой смысл  искать что-либо сразу во всех колонках?

Всего записей: 1034 | Зарегистр. 17-05-2003 | Отправлено: 10:30 01-02-2013
mdid

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите плз, как в TcxRichEditProperties загрузить данные из стрима?

Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 10:43 01-02-2013
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
makz
таблица (грид) у меня имеет более сложную структуру, чем я накидал на скорую руку для демонстрации. Конечно, фильтр в каждой отдельно взятой колонке - это гуд, но что делать пользователю, если он знает лишь одно ключевое слово (да и то не целиком, а лишь его некоторую часть)? Заставить пользователя шерстить каждую колонку - не проблема, заставлю, но хотелось бы сжалиться над ним и минимизировать потерю рабочего времени на поиск (а поиск в таблице с десятками тысяч строк и почти тремя десятками колонок - уже не роскошь, а очень важная необходимость).
 
Добавлено:
Кажется, нашёл то, что надо, но фильтр в примере зависим от регистра. Может кто-нибудь помочь совладать с ним?

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 10:49 01-02-2013
makz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mdid
http://www.devexpress.com/Support/Center/Question/Details/Q422760
 
reenoip
Ну назначить программно один фильтр на нужные колонки не проблема вроде.

Всего записей: 1034 | Зарегистр. 17-05-2003 | Отправлено: 11:11 01-02-2013
mdid

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip
а в чем проблема запрос сгенерировать?
 
Добавлено:
makz
в обычный TcxRichEdit я в курсе. А у TcxRichEditProperties нет ничего похожего на стрим. А EditValue стрим не ест.

Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 11:11 01-02-2013
makz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Таки да, фильтровать НД непосредственно значительно продуктивнее, в случае с десятками тысяч записей-то.
 
Добавлено:
mdid
Имеется ввиду репозиторий?
Вообще не очень понятно о чем речь; то ли текст загрузить надо, то ли сами проперти? А откуда взялось EditValue в TcxRichEditProperties?

Всего записей: 1034 | Зарегистр. 17-05-2003 | Отправлено: 11:17 01-02-2013 | Исправлено: makz, 11:39 01-02-2013
mdid

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
makz
нужно загрузить текст в TcxBarEditItem типа RichEdit через поток. Свойства мне не нужны. Текст хранится в базе.

Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 11:41 01-02-2013
X11



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

Цитата:
но фильтр в примере зависим от регистра. Может кто-нибудь помочь совладать с ним?

 
DataController.Filter.Options.fcoCaseInsensitive := True

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:17 01-02-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 4)


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru