Как отобразить таблицы master-detail в две xtragrid? - PullRequest
0 голосов
/ 07 марта 2012

У меня есть таблицы: пользователи и сообщения. И создайте отношения «один-много» между этими таблицами. И, если я отображу эти две таблицы в одной xtragrid, это не проблема, но я хочу отобразить в две сетки, детали сообщения не отображаются. пожалуйста, помогите мне!

код ключа:

1.создать набор данных пользователей и сообщений:

        DataSet ds = new DataSet();
        ds = SqlHelper.ExecuteDataset(fbh.ConnectionString, CommandType.Text, s);
        DataTable mess = ds.Tables[0];
        mess.TableName = "Messages";
        DataTable user = deptmentUserMessages.Tables["Users"];

        DataTable m = new DataTable("Messages");
        m.Merge(mess);
        deptmentUserMessages.Tables.Add(m);
        deptmentUserMessages.Relations.Add("**UserMessages**", user.Columns["UserName"], m.Columns["SENDER"]);

deptmentUserMessages - это статический набор данных

2.в событии form.load я должен сделать:

        gcMessage.DataSource = master;
        gcMessageDetail.DataSource = detail;

        master.DataSource = pub.DeptmentUserMessages;
        master.DataMember = "Users";
        detail.DataSource = master;
        detail.DataMember = "**UserMessages**";

мастер и деталь - BindingSource.

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Вы должны обработать событие xtargrid FocusedRowChanged , чтобы заполнить детальную сетку.

Получить значение поля первичного ключа для извлечения значений из дочерней таблицы, а затем установить источник данных дочерней сетки. Используйте метод GetRowCellValue (Int32, String)

private void gridView1_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e) {

if(e.FocusedRowHandle >=0)
{
/// Get master table selected row's primary column value
/// then create a DataView from the detail table 
// and set datasource of detail grid.
dvUserMessages = (Filtered row by primary column value);

master.DataSource = dvUserMessages.ToTable();

}

}

Ссылка: Родитель - дочерние отношения между двумя GridViews

1 голос
/ 17 октября 2014

Использование только события FocusedRowChanged недостаточно. Когда DataSource изменяется, это событие не срабатывает. Поскольку свойство position не изменяется, оно остается равным 0. И оно не срабатывает, когда пользователь фильтрует строки в основной сетке. Итак, добавьте к этому примеру аналогичный обработчик события для события ColumnFilterChanged, а также заполните дочернюю сетку сразу после установки свойства DataSource главной сетки.

...