我要表:用户和消息。并创建这些表之间的一对多关系。并且,如果我在单个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。
答案 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();
}
}
答案 1 :(得分:1)
仅使用事件FocusedRowChanged是不够的。更改DataSource时,不会触发此事件。由于position属性不会更改,因此它保持为0.当用户过滤主网格中的行时,它不会触发。因此,在ColumnFilterChanged事件上添加此示例类似的事件处理程序,并在设置主网格的DataSource属性后立即填充子网格。