DBGridEh设置表中表
一、Form放入DBGridEh1
1、设置属性
DBGridEh1. RowDetailPane. Active属性设置为True。
此时,DBGridEh1,出现蓝色框。如下图:
二、DBGridEh1,出现蓝色框中,放入DBGridEh2
1、设置属性
DBGridEh2. Align:=alClient。
2、字段的选择
DBGridEh1约定,打开表中表的方法,是第一个字段,即第一列中的。通过鼠标点击,打开子表。因此:
(1)DBGridEh1的第一个字段,应该是用于分类的字段,比如:“姓名”。这样,在DBGrid1的栏栅中,
在Form的OnShow事件中,就得有以下的设置:
SQL:='select 姓名,选择,性别,出生年月,年龄,部门,床号,护理等级,居住地址,户籍地址,入住类型,身份证号,入院日期,出院日期,死亡日期,移动电话,ID '+
'From 老人基本信息 where 入住类型=''住院'' order by ''入住类型'' DESC,''床号''';
三、数据集设置
1、DBGridEh1数据集
procedure TShowOldChildFrm.Button1Click(Sender: TObject);
var SQL,S:string;
L,i:integer;
begin
S:=Combobox1.Text;
DBGridEh1.DataSource:=DataModule1.DataSource1;
if S='' then SQL:='select 姓名,选择,性别,出生年月,年龄,部门,床号,护理等级,居住地址,户籍地址,入住类型,身份证号,入院日期,出院日期,死亡日期,移动电话,ID '+
'From 老人基本信息 where 入住类型=''住院'' order by ''入住类型'' DESC,''床号'''
else SQL:='select 姓名,选择,性别,出生年月,年龄,部门,床号,护理等级,居住地址,户籍地址,入住类型,身份证号,入院日期,出院日期,死亡日期,移动电话,ID '+
'From 老人基本信息 where (入住类型=''住院'') and (部门='+Quotedstr(S)+') order by ''入住类型'' DESC,''床号''';
DataModule1.ClientDataSet1.Active:=False;
DataModule1.ClientDataSet1.DataRequest(SQL);
DataModule1.ClientDataSet1.Active:=True;
L:=DataModule1.ClientDataSet1.RecordCount;
DBGridEh1.DataSource:=DataModule1.DataSource1;
DBGridEh_AutoSize(DBGridEh1,DataModule1.DataSource1);
for i:= 0 to DBGridEh1.Columns.Count-1 do
begin
DBGridEh1.Columns[i].Title.Alignment := taCenter; //标题对中
if (i<>8) and (i<>9) then
DBGridEh1.Columns[i].Alignment:=taCenter; //列 对中
end;
DBGridEh1.Columns[0].Width:=90; //第一列拉宽
DBGridEh1.DataSource.DataSet.Fields[1].DisplayLabel:='√'; // 修改第二列字段显示名称
DBGridEh1.DataSource.DataSet.Fields[5].DisplayLabel:='区域'; //修改DBGrid列标题
SetKeyUp; // 鼠标Key事件
SelectFalse; //选择 False
statusbar1.Panels[0].text:=' 数据库有: '+IntToStr(L)+'人信息';
end;
2、DBGrid2数据集,通过DBGrid1的鼠标键盘事件获取
(1)鼠标键盘事件方法
procedure TShowOldChildFrm.SetKeyUp;
var SQL,ID,S:string;
begin
if Not DBGridEh1.DataSource.DataSet.Eof then
begin
ID:=DataModule1.ClientDataSet1.FieldByName('身份证号').AsString;
S:='查询老人姓名:'+DataModule1.ClientDataSet1.FieldByName('姓名').AsString;
S:=S+' 入住类型:'+DataModule1.ClientDataSet1.FieldByName('入住类型').AsString;
DBGridEh2.DataSource:=DataModule1.DataSource2;
SQL:='select 排序,姓名,关系,监护人,工作单位,单位电话,家庭电话,移动电话,'+
'家庭地址,邮政编码,证件类型,身份证号,老人姓名,老人身份证号,经济状况,备注,ID '+
'From 老人亲友信息 where老人身份证号='#39+ID+#39+' order by ''排序''';
DataModule1.ClientDataSet2.Active:=False;
DataModule1.ClientDataSet2.DataRequest(SQL);
DataModule1.ClientDataSet2.Active:=True;
SetSource2(DataModule1.DataSource2); // 字段对应数据集
DBGridEh2.Columns.Items[0].Width:=DBGridEh1.Canvas.TextWidth('12345'); // 例宽
DBGridEh2.Columns.Items[1].Width:=DBGridEh1.Canvas.TextWidth('123456789');
DBGridEh2.Columns.Items[2].Width:=DBGridEh1.Canvas.TextWidth('12345678');
DBGridEh2.Columns.Items[3].Width:=DBGridEh1.Canvas.TextWidth('12345678');
DBGridEh2.Columns.Items[4].Width:=DBGridEh1.Canvas.TextWidth('12345678901234567890');
DBGridEh2.Columns.Items[5].Width:=DBGridEh1.Canvas.TextWidth('12345678901234');
DBGridEh2.Columns.Items[6].Width:=DBGridEh1.Canvas.TextWidth('12345678901234');
DBGridEh2.Columns.Items[7].Width:=DBGridEh1.Canvas.TextWidth('12345678901234');
DBGridEh2.Columns.Items[8].Width:=DBGridEh1.Canvas.TextWidth('123456789012345678901234567890');
statusbar1.Panels[0].text:=' 数据库有: '+IntToStr(OldN)+'人信息 '+S;
end;
end;
(2)鼠标键盘事件
procedure TShowOldChildFrm.DBGridEh1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
SetKeyUp;
end;
procedure TShowOldChildFrm.DBGridEh1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SetKeyUp;
end;
四、效果
1、DBGridEh1
2、打开DBGridEh2