Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Использование DevExpress 2

Автор: afiget
Дата сообщения: 10.03.2008 01:01
Lexus300
Колонку указать не забыл?
Автор: programmer1981
Дата сообщения: 10.03.2008 08:08

Цитата:
народ, подскажите, почему при использовании агрегатной функции cstSum в SummaryFooter не происходит никаких действий. т.е. сумма 0,00?
использую dxGrid


Цитата:
Lexus300
Колонку указать не забыл?

Еще как вариант - тип поля посмотреть (стринги суммироватся не будут)
Автор: Lexus300
Дата сообщения: 10.03.2008 08:09

Цитата:
Колонку указать не забыл?

какую колонку?
у столбца CENA указываю: SummaryField = CENA, SummaryFooterField = CENA, SummaryFooterType = cstSum... результат 0.00
что не так?
Автор: luberello
Дата сообщения: 10.03.2008 14:09
люди, помогите разобратся с сортировкой.

такая ситуация:
есть dxDBGrid (версия 3.1), в нем еcть поле которое содержит id. к этому полю привязан LookupComboBox, он содержит два массива TStrings: Items[] и Values[].
Items - содержит id
Values - содержит текстовые значения

Все отображатся нормально (на гриде в поле видно текстовое значение соответствующее его id), но при нажатии на заголовке поля, даные сортируются по id, а не по отображаемых значениях. Как можно это решить? Мот кто-то уже с таким стыкался?

p.s.
В 4 версии грида уже есть property SortByDisplayText которая делает то что надо, но к сожалению перейти на другую версию возможности нет
Автор: afiget
Дата сообщения: 10.03.2008 14:11

Цитата:
у столбца CENA указываю: SummaryField = CENA, SummaryFooterField = CENA, SummaryFooterType = cstSum... результат 0.00

Какая версия грида?
В 6-ке таких свойств нет. И констант таких нет
У колонки грида при установленных DataBinding указываем в Summary.FooterKind значение skSum.
Автор: Lexus300
Дата сообщения: 10.03.2008 16:08
afiget
дружище, ты гоовришь про cxGrid, а я говорю про dxDBGrid
Автор: StdNet
Дата сообщения: 10.03.2008 18:21
Доброго дня.
Есть 3 таблицы
tbl1 с полями ID, code, descr
tbl2 с полями ID, code, descr
tbl3 с полями fID, sID

на форме 2 gridControl'a в ниэ выведены code, descr с первых двух тблиц нада сделать так что бы юзер мышкой выделил строку в первом гриде, потом во втором, тыцнл энтер и в 3ю таблицы вставились ID с первых двух.
так вот собственно вопрос как узнать ID выделеного элемента в гриде?
Автор: luberello
Дата сообщения: 10.03.2008 18:56
Сам себе и отвечаю:

можно перекрыть метод грида OnCompare


Цитата:

procedure TfmMain.grdMaster(Sender: TObject; Node1,
Node2: TdxTreeListNode; var Compare: Integer);
var
S1, S2: String;
SortedCol: TdxTreeListColumn;
Sign : Integer;
begin
SortedCol := grdMySortedColumn;

S1 := Node1.Strings[SortedCol.Index];
S2 := Node2.Strings[SortedCol.Index];

Sign := AnsiCompareStr (S1, S2);

if Sign = 0 then
Compare := 0
else
begin
if Sign > 0 then
Compare := 1
else
Compare := -1;

if SortedCol.Sorted = csDown then
Compare := -Compare;
end;

end;


взято от сюда: http://www.devexpress.com/Support/Center/KB/p/A220.aspx?searchtext=&tid=dee0f498-9b49-42c9-bee9-5530e0ea67f6&pid=d8b2605b-186b-406d-af9f-4a4cc9f8136e
Автор: X11
Дата сообщения: 11.03.2008 15:20
Есть ли возможность в cxGride динамически узнать максимальное значение поля?

Мне нужно включить фильтр по полю ID, но сначала нужно узнать максимальное значение, чтобы были видны только вновь добавляемые записи?
Автор: X11
Дата сообщения: 12.03.2008 09:33
Строю фильтр во время исполнения программы

Код:
procedure TfmMain.SetFilterByMaxID();
Var
iMaxID:integer;
begin
dbgReklama.DataController.Filter.Active := false;
iMaxID := DM.GenId('gen_treklama_id');
WITH dbgReklama.DataController.Filter.Root do begin
Clear;
AddItem(dbgReklamaID, foGreater, iMaxID, 'Автофильтр по ID');
end;
end;
Автор: Look_at_BustA
Дата сообщения: 12.03.2008 09:35
Люди, а для Delphi 7 где можно скачать накомпонеты??? Для работы с БД нужны и контрлы всякие
Автор: X11
Дата сообщения: 12.03.2008 09:58
см. шапку
Автор: Dennica
Дата сообщения: 12.03.2008 10:06
X11
У фильтра есть свойство Active. И когда строиш фильтр отключай его изменения:

Код: ADataController.Filter.BeginUpdate;
try
ADataController.Filter.Root.Clear;
ADataController.Filter.Root.BoolOperatorKind := fboOr;
ADataController.Filter.Root.AddItem(tvCustomersPRODUCTID, foEqual, cExpressQuantumGridID, 'ExpressQuantumGrid');
ADataController.Filter.Root.AddItem(tvCustomersPRODUCTID, foEqual, cXpressQuantumGridID, 'XpressQuantumGrid');
ADataController.Filter.Root.AddItem(tvCustomersPRODUCTID, foEqual, cXtraGridID, 'XtraGrid');
ADataController.Filter.Root.AddItem(tvCustomersPRODUCTID, foEqual, cASPXGridID, 'ASPX Grid');
ADataController.Filter.Active := False;
finally
ADataController.Filter.EndUpdate;
end;
Автор: X11
Дата сообщения: 12.03.2008 10:38

Цитата:
ADataController.Filter.Root.AddItem(tvCustomersPRODUCTID, foEqual, cASPXGridID, 'ASPX Grid');
ADataController.Filter.Active := False;
finally

ты уверен в этом?
может ADataController.Filter.Active := TRUE;
Автор: Dennica
Дата сообщения: 12.03.2008 10:43
X11
true конечно, ну описался я =)
Автор: X11
Дата сообщения: 12.03.2008 11:05
Вот, что получилось, пока нормально работает, а там посмотрим

Код:
procedure TfmMain.SetFilterByMaxID();
Var
iMaxID:integer;
begin
try
dbgReklama.DataController.Filter.Active := false;
actResetFilterGroupSortExecute(nil);
iMaxID := DM.GenId('gen_treklama_id');
dbgReklama.DataController.Filter.BeginUpdate;
WITH dbgReklama.DataController.Filter.Root do begin
Clear;
AddItem(dbgReklamaID, foGreater, iMaxID, IntToStr(iMaxID));
end;
dbgReklama.DataController.Filter.Active := true;
finally
dbgReklama.DataController.Filter.EndUpdate;
end;
end;

Автор: StdNet
Дата сообщения: 13.03.2008 09:52
на свой вопрос по поводу определения значения поля которое не отображаеться в гриде придумал такое решение:


Код:
private void gridControl1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
int rowno = gridView1.GetDataSourceRowIndex(gridView1.FocusedRowHandle);
string id = ds1.Tables[0].Rows[rowno]["id"].ToString();
}
}

Автор: X11
Дата сообщения: 13.03.2008 10:19
Есть dxSkinController и есть combobox, как в компобокс "запихать" список скинов?
Спасибо.

Добавлено:
принцип такой, чтобы пользователь мог выбирать скин
Автор: X11
Дата сообщения: 13.03.2008 12:39
Как в dxMemData определить, существует ли поле с именем, например 'Name1'?
Автор: Dennica
Дата сообщения: 13.03.2008 13:42
X11

Код:
with memdsetX.FindField('Name1') do
begin
Value := 0;
end;
Автор: shulum
Дата сообщения: 13.03.2008 13:57
X11
dxMemData.FieldList.IndexOf('бла-бла')
если выдаст -1, то поля нет, в противном случае значение будет индексом поля
Автор: X11
Дата сообщения: 13.03.2008 14:29
Dennica
мне нужно что-то типа if Dataset1.FieldExists('Name1') then Dataset1.FieldByName('Name2').As....[q][/q]
Автор: korobovmax
Дата сообщения: 13.03.2008 14:50
Вызвать у датасета FindField и проверить на nil

FieldByName юзать не надо - ругается:
FindField is the same as the FieldByName method, except that it returns nil (Delphi) or NULL (C++) rather than raising an exception when the field is not found.
Автор: Dennica
Дата сообщения: 13.03.2008 15:52
StdNet

Цитата:
на свой вопрос по поводу определения значения поля которое не отображаеться в гриде придумал такое решение:


Код:
private void gridControl1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
int rowno = gridView1.GetDataSourceRowIndex(gridView1.FocusedRowHandle);
string id = ds1.Tables[0].Rows[rowno]["id"].ToString();
}
}




может есть еще какой то способ? реализованый в самом гриде?


Незнаю как на C это переписать, но на delphi выглядит так:

Код:
gridView1.DataController.GetItemByFieldName('id').EditValue
Автор: StdNet
Дата сообщения: 14.03.2008 22:24
2Dennica

а не подскажеш как сделать что то типа комбо бокса но что бы там было например 2 поля(по одному из них можно было искать) и при выборе значения (например descr) можно было вытянуть ID например который не отображаеться? )
Автор: korobovmax
Дата сообщения: 15.03.2008 08:36
StdNet, смотри lookupcombobox и lookupcomboboxex
Автор: AngeIa
Дата сообщения: 15.03.2008 08:45
Добрый день всем.
Скачала DevExpress, но установить на Делфи 2007 не получается, компиляция проходит нормально, а когда нажимаю install пишет - can't be installed becouse it is not a design time package. В чем может быть проблема?
Автор: Rudia
Дата сообщения: 15.03.2008 13:21
AngeIa
Посмотрите ещё, скорее всего там есть ещё пакеты, а то, что вы скомпилировали, нужен для других пакетов.
Автор: Dennica
Дата сообщения: 15.03.2008 13:52
AngeIa
Скачай лучше инсталяк от feandy отсюда и не мучайся.
Автор: korobovmax
Дата сообщения: 15.03.2008 15:57
can't be installed becouse it is not a design time package - значит, что пакет динамический (runtime).
Применительно к ДевЭкспресс: надо только скомпилять ваш пакет (с префиксом vcl), но не устанавливать (не получится). Открыть пакет с таким же названием, но с префиксом (dcl). Скомпилять и установить его.

Как было замечено Rudia, бывает и ошибка в очереди установки пакетов. В вашем случае другая ошибка, но очередь надо соблюсти.

И, наконец, как было сказано Dennica, проще всего - дистрибутив от feandy с уже созданным сценарием автоматической установки компонентов в разные IDE.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

Предыдущая тема: Язык программирования на русском языке


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.