三层结构,用ADOConnection+ADOQuery+DataSetProvider+SocketConnection+ClientDataSet搭建,感知控件用DBGridEh1实现,当击DBGridEh1的标题时,可以实现对数据的升序和降序进行排序,代码如下:
procedure TFormFifth.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer; Column: TColumnEh);
var
i : integer;
begin
if ClientDataSet1.IndexFieldNames<>'' then
begin
i := TClientDataSet(ClientDataSet1).IndexDefs.IndexOf('i'+Column.FieldName); //取得列的序号
if i = -1 then
begin
with ClientDataSet1.IndexDefs.AddIndexDef do
begin
Name := 'i'+Column.FieldName;
Fields := Column.FieldName;
DescFields := Column.FieldName;
end;
end;
ClientDataSet1.IndexFieldNames := '';
ClientDataSet1.IndexName := 'i'+Column.FieldName;
end
else
begin
ClientDataSet1.IndexName := '';
ClientDataSet1.IndexFieldNames := Column.FieldName;
end;
end;可是当用两个TClientDataSet实现主从表时,点击从表的DBGridEh2的标题时,会出现:
ClientDataSet2 : Field index out of range
的错误消息。主从表的连接用:
ClientDataSet2.MasterSource := ClientDataSet1;
ClientDataSet2.IndexFieldNames := 'CustNo';
ClientDataSet2.MasterFields := 'CustNo';请指教!谢谢!
procedure TFormFifth.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer; Column: TColumnEh);
var
i : integer;
begin
if ClientDataSet1.IndexFieldNames<>'' then
begin
i := TClientDataSet(ClientDataSet1).IndexDefs.IndexOf('i'+Column.FieldName); //取得列的序号
if i = -1 then
begin
with ClientDataSet1.IndexDefs.AddIndexDef do
begin
Name := 'i'+Column.FieldName;
Fields := Column.FieldName;
DescFields := Column.FieldName;
end;
end;
ClientDataSet1.IndexFieldNames := '';
ClientDataSet1.IndexName := 'i'+Column.FieldName;
end
else
begin
ClientDataSet1.IndexName := '';
ClientDataSet1.IndexFieldNames := Column.FieldName;
end;
end;可是当用两个TClientDataSet实现主从表时,点击从表的DBGridEh2的标题时,会出现:
ClientDataSet2 : Field index out of range
的错误消息。主从表的连接用:
ClientDataSet2.MasterSource := ClientDataSet1;
ClientDataSet2.IndexFieldNames := 'CustNo';
ClientDataSet2.MasterFields := 'CustNo';请指教!谢谢!
AutosortMarking:=True
2.设置DbGridEh的属性:(不一定总要设置,与使用的数据连接有关)
sortlocal:=True;
3.uses 单元
Ado------ehlibADo
TclientData------ehlibCDS
BDE ---------ehlibBDE
4.Column属性
TitleButton:=True 可还是只能在单表中进行,在从表中排序时,还是出现:
ClientDataSet2 : Field index out of range
的错误。
这就与代码没什么关系了,因为根本就没有写代码。