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

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

Автор: Dronton2
Дата сообщения: 21.06.2007 14:26
maxdddca123
Уже июньская версия есть. Ссылку см. в шапке.
Автор: idmail
Дата сообщения: 21.06.2007 15:30

Код: GridView childView = (GridView)gridControl2.ViewCollection[0];
//DataRow dr = (DataRow)childView.GetRow(r);
DataRow dr = childView.GetDataRow(r);
dr["Ось"] = data;//data - строка
Автор: raspe
Дата сообщения: 21.06.2007 17:44
idmail
Чего-то я запутался. Опиши проблему подробней. У тебя есть mainView. Тебе нужно достучаться к дочерней view. Или наоборот?

На сколько я понял, у тебя второй вариант от дочерней вью, нужно к родительской строке. Так? В общем давай подробней, что имеешь и что нужно получить

Добавлено:
Кажется я понял твой косяк, у тебя ChildView уже закрыт и ты пытаешься получать child DataRow? Это неправильно!!!!! Получить DataRow, RowHandle и все что связано с данными ты можешь только тогда, когда открыт соответстующий view. Тот view что ты используешь - шаблонный - в нем нет никаких данных!!!! Тебе нужно в том месте, где ты обрабатываешь изменение дочерней строки после выбора значения в диалоге (обработчик нажатия кнопки в editButton), получать DataRow дочерней строки (или родительской) и уже там ее изменять или сохранять ссылку, если изменение будет позже
Автор: idmail
Дата сообщения: 21.06.2007 18:20
Вот скрин: http://img517.imageshack.us/img517/332/gwtmscrez1.jpg

Вопросы:
1. В поле "Ось" editButton. По нажатию на кнопку у меня открывается форма, в которой я что-то выбираю, нажимаю "Применить" и что-то должно записаться в строку.

Делаю следующим образом:
Запоминаю строку. (Только как ее грамотно запомнить?)
Переопределяю конструктор новой формы и передаю строку туда, чтоб в дальнейшем использовать.
После нажатия "Применить" возвращуюсь в главную форму и выставляю значение. Выставить его не получается, потому-что грид внутренний не доступен. Код я приводли выше.

2. Необходимо при изменении поля Куда, не важно какой записи менять у главной таблицы поле местоположение. Это совсем не понятно как сделать

Ну незнаю куда подробней. Читай личные сообщения.
Автор: raspe
Дата сообщения: 21.06.2007 19:49
idmail
По поводу первого вопроса. Тебе ведь нужно из формы вернуть строку и записать ее в ячейку? Тогда я бы сделал так

[c#]

// Обработчик нажатия кнопки
private void buttonEdit_ButtonClick(Args e)
{
using(MyForm frm = new MyForm())
{
frm.ShowDialog();
GridView gv = (GridView)gridControl.FocusedView;
gv.SetRowCellValue (gv.FocusedRowHandle, "Ось", frm.MyString);
}
}


// Код формы, где вводится строка
// в ней textBox и кнопка Ok
public class MyForm : Form
{
public string MyString
{
get { return textBox1.Text; }
}

public void button1_Click()
{
this.Close();
}
}

[/c#]


2) Для изменения родительской записи, после изменения дочерней нужно подписаться на событие CellValueChanged в дочернем гриде

Код примерно будет такой:

[c#]
private void childView_CellValueChanged(e)
{
if(e.Column == "Куда") // Тут сам найди какое сво-во отвечает за имя колонки
{
((DataRowView)gridControl.FocusedView.SourceRow)["Местоположение"] = e.Value;
}
}
[/c#]

Примерно так
Автор: idmail
Дата сообщения: 21.06.2007 21:41
raspe, супер. Просто огромное тебе спасибо, незнаю как еще отблагодарить.
Мучался с этим 3 дня, а ты вот так все быстро решил.
Автор: raspe
Дата сообщения: 22.06.2007 08:50
idmail
Кстати, по поводу высоты строк я прогнал - никакой это не баг. Вот цитата разработчиков


Цитата:

The grid row height cannot be set to a value less than the minimum row height. The minimum height is calculated from the grid and column font size and minimum heights of column in-place editors.


В общем заведи еще один Imagе collection маленького размера, присвой эту коллекцию изображений свойству SmallImages imageComboBox-а
Автор: idmail
Дата сообщения: 22.06.2007 10:29
raspe, спасибо еще раз - помогло

Добавлено:
С гридом разобрались, теперь очередь отчетов
По ним два вопроса:
1. Как вставлять формулу, в которой будут считаться данные из разных таблиц? Где вводить саму формулу?
2. Мне необходимо на всех страницах, кроме первой, выводить определенный текст, как сделать так, чтоб на первой его не было?
Автор: idmail
Дата сообщения: 23.06.2007 17:10
И еще... мне необходимо отобразить одну таблицу, которая связана с другой. В дочерней таблицы хранится номер записи из главной таблицы для связи.
Как мне зная этот номер отобразить нужное поле, нужной записи из главной талицы?
Автор: SerjP75
Дата сообщения: 25.06.2007 06:26
А может просто взять нормальный генератор отчетов? Например FastReport
Автор: idmail
Дата сообщения: 25.06.2007 07:12
SerjP75, мы говорим про .NET. Для него это и есть нормальный генератор отчетов.

Добавлено:
Можно ли у этого грида в preview текст вывести нужные мне данные?
Мне необходимо кое-какие расчеты проводить и сразу выводить их. Не могу придумать куда..

Добавлено:
Про мои данные в превью нашел: http://www.devexpress.com/Help/?document=XtraGrid/CustomDocument703.htm&levelup=true
Но теперь сам превью не показывает, хотя ShowPreview стоит в тру. Чудеса...

Добавлено:
Оказывается, при сохранении лейаута грида без превью при загрузке он гео не покажет, даже если тот включен - баг, фичей назвать сложно.
Автор: X11
Дата сообщения: 25.06.2007 13:21
Привет всем.

есть событие OnBeforDelete. CxGrid использую, как StringGrid.
как в этом событии узнать значение определённого поля, удапляемой строки?

Код:
sgMes - TcxGridTableView
procedure TfmInboundMes.sgMesDataControllerBeforeDelete(ADataController: TcxCustomDataController;
ARecordIndex: Integer);
begin
if DeleteFile(sgMes.Columns[3].editvalue) then
Log('Удалён файл сообщения: '+sgMes.Columns[3].editvalue)
else
Log('Не удалось удалить файл сообщения: '+sgMes.Columns[3].editvalue);
end;
Автор: Dronton2
Дата сообщения: 25.06.2007 13:42
Нужно так:
Log('Удалён файл сообщения: '+ADataController.Values[ARecordIndex, 3]);

А ещё лучше:
Log('Удалён файл сообщения: '+ADataController.Values[ARecordIndex, myColumn.Index]);
т.к. индекс колонки может поменяться.
Автор: X11
Дата сообщения: 25.06.2007 15:07
Dronton2, спасибище.
Уважаемые, есть ещё вопрос: нужно удалить все записи из этого же грида, где стоит флажок в определённом поле. Я думаю пробежаться по всем записям, и если флажок "поднят", то выделяем её, а потом DeleteSelection, но что-тоя не так делаю


Код:
sgMesOpend - колонка типа CheckBox
procedure TfmInboundMes.actDeleteOpendExecute(Sender: TObject);
Var
i:integer;
begin
if (MessageBox(Application.ActiveFormHandle, PAnsiChar('Удалить прочитанные сообщение вместе с файлами?'), 'Удаление', MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = idYes)
then begin
for i := 0 to sgMes.DataController.RecordCount-1 do begin
if sgMes.DataController.Values[i, sgMesOpend.Index] = true then
sgMes.DataController.SelectRows(i,i);
end;//for
end;//if
end;
Автор: Dronton2
Дата сообщения: 25.06.2007 15:28
X11
Сначала нужно проверить, что sgMes.DataController.MultiSelect := true;
ну, и RecordIndex преобразовать в RowIndex. А для ускорения процесса использовать beginUpdate и endUpdate:

Код: with sgMes.DataController do
begin
beginUpdate;
MultiSelect := true;
ClearSelection();
for I := 0 to RecordCount - 1 do
ChangeRowSelection(GetRowIndexByRecordIndex(I, True), True);
endUpdate;
end;
Автор: X11
Дата сообщения: 25.06.2007 15:41
да, точно, про MultiSelect я и забыл
Автор: idmail
Дата сообщения: 26.06.2007 11:13
xtraReport.NET:
1. Как в отчете для определенного поля производить какие-то расчеты? Мне необходимо выполнить сложный SQL запрос и ег орезультат распечатать.
2. Как вывести какой текст на всех страницах, КРОМЕ первой?
3. Необходимо отобразить одну таблицу, которая связана с другой. В дочерней таблицы хранится номер записи из главной таблицы для связи.
Как мне зная этот номер отобразить нужное поле, нужной записи из главной талицы?
Автор: X11
Дата сообщения: 26.06.2007 14:46
Приветствую всех!
Таок код, Передаю в процедуру, как параметр TcxGridBandedTableView. Как узнать значение определенной колонки в таком случае? Может есть что-то типа GetColumnIndexByName??

Код:
Var
procedure TfmAdmSrv.CreatHomeFolders(grid:TcxGridBandedTableView);
Var
i:integer;
begin
for I := 0 to grid.DataController.RecordCount - 1 do begin
if ForceDirectories(grid.DataController.Values[i, grid.DataController. ЧТО СЮДА]) then


end;// for I := 0 to grid.DataController.RecordCount - 1 do begin
end;
Автор: Dennica
Дата сообщения: 26.06.2007 15:40
X11
ColumnName.Index впиши =)
Автор: Dronton2
Дата сообщения: 26.06.2007 15:42
X11
Это смотря, какие исходные данные есть:
grid.DataController.Values[i, myColumn.Index]
или так:
grid.DataController.Values[i, grid.GetColumnByFieldName('xxx').Index]
или так:
grid.DataController.Values[i, grid.DataController.GetItemByFieldName('xxx').Index]

Вообще, для TableView лучше придумать какое-нибудь другое название, кроме как "grid"
Автор: X11
Дата сообщения: 26.06.2007 15:43
ага, у одного грида колумн так называется, а у дрого эдак, что получим в итоге?
Автор: Dronton2
Дата сообщения: 26.06.2007 16:15
X11
У грида колонок нет. Колонки есть у TableView.

Опять-таки, всё зависит от исходных данных:
если нужно найти колонку по тексту заголовка, то можно написать функцию, перебирающую все колонки и сравнивающую текст заголовка с искомым текстом.
Можно колонкам присвоить какой-нибудь Tag. Далее - аналогично предыдущему способу.
В случае DBTableView процедуры уже написана: GetColumnByFieldName и GetItemByFieldName
Автор: X11
Дата сообщения: 26.06.2007 16:30

Цитата:
grid.DataController.Values[i, grid.GetColumnByFieldName('xxx').Index]

Вот оно, спасибо


Цитата:
У грида колонок нет. Колонки есть у TableView.

В моём понимании есть грид и датагрид, грид это таблица в принципе, я не имел ввиду конкретно тип TcxGrid, если сбил с толко, то прошу прощения.
Автор: WebInc
Дата сообщения: 28.06.2007 04:26
Как к GridView прицепить PopupMenu? Что то никак не могу разобраться
Покавешаю на событие MouseUp, menu.ShowPopup(), но как то странновато это.
Автор: Dennica
Дата сообщения: 28.06.2007 06:28
WebInc
Поищи TcxGridPopupMenu
Автор: WebInc
Дата сообщения: 28.06.2007 07:06
Dennica
1. я на C# пишу
2. Это не то мне надо прикрутить когда я на строку во View кликаю а не на заголовок колонки, групповую панель и прочее.
Автор: Dennica
Дата сообщения: 28.06.2007 08:24
WebInc

Цитата:
1. я на C# пишу

Думаю врядли разработчики под разные платформы писали все отдельно. Общие принципы должны быть одинаковыми.

Цитата:
2. Это не то мне надо прикрутить когда я на строку во View кликаю а не на заголовок колонки, групповую панель и прочее.

Это то. С помощью этой штуки можно отслежывать щелчек по любому элементу view. Раскрой св-о PopupMenus. Добавь новый элемент cxPopupMenuInfo и загляни в его сво-во HitTypes. Выставь там в true:
gvhtCell - попап будет вылетать по щелчку на ячейке
gvhtRecord - по записи
gvhtPreview - по превью
gvhtExpandButton - по кнопке раскрытия группы
ну и дальше что понравится...
Как сам попап прикрутить, прочитаеш, там пара абзацев в хэлпе всего.
Автор: Dronton2
Дата сообщения: 28.06.2007 10:13
WebInc
Есть online-документация.
Про popup-меню говорится здесь
Автор: raspe
Дата сообщения: 28.06.2007 10:24
WebInc
https://www.devexpress.com/Support/Center/ViewKBIssue.aspx?kbid=A1386
Автор: Dennica
Дата сообщения: 28.06.2007 11:02
raspe
Мда, неужели в C# попап для каждого view нужно прописывать через код? Гемор ..

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

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


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