如何将master-detail表显示为两个xtragrid?

时间:2012-03-07 17:45:50

标签: devexpress master-detail xtragrid relation

我要表:用户和消息。并创建这些表之间的一对多关系。并且,如果我在单个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 个答案:

答案 0 :(得分:2)

您应该处理xtargrid FocusedRowChanged事件以填充详细信息网格。

获取主键字段值以从子表中获取值,然后设置子网格的数据源。使用GetRowCellValue(Int32,String) Method

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();

}

}

参考:Parent - Child relationship between Two GridViews

答案 1 :(得分:1)

仅使用事件FocusedRowChanged是不够的。更改DataSource时,不会触发此事件。由于position属性不会更改,因此它保持为0.当用户过滤主网格中的行时,它不会触发。因此,在ColumnFilterChanged事件上添加此示例类似的事件处理程序,并在设置主网格的DataSource属性后立即填充子网格。