请教 DBGrid 的两个小问题。

hoho5999 hoho5999 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
1. 我用 TStringGrid(DBGrid1).fixedcols := 2 固定第二列以后,在 dgediting 为 true 的时候,点击第二个固定列,发现 DBGrid 会自动生成一个数据与第二固定列一样的非固定列来,奇怪。怎么屏蔽掉它呀???(不要dgrowselect=true,因为我需要对表进行编辑,需要 dgediting=true)


2. 本人使用如下的排序功能:
procedure DbGridSort(Column: TColumn);
var s,cFieldName:string;
i:integer;
DataSet:TDataSet;
procedure setTitle;
var ii:integer;
cStr:string;
c:TColumn;
begin
for ii:=0 to TDBGrid(Column.Grid).Columns.Count-1 do
begin
c:=TDBGrid(Column.Grid).Columns[ii];
cStr:=c.Title.Caption;
if (pos('▲',cStr)=1) or (pos('▼',cStr)=1) then begin
Delete(cStr,1,2);
c.Title.Caption:=cStr;
end;
end;
end;
begin
setTitle;
DataSet:=Column.Grid.DataSource.DataSet;
if Column.Field.FieldKind=fkLookup then
cFieldName:=Column.Field.KeyFields
else if Column.Field.FieldKind=fkCalculated then
cFieldName:=Column.Field.KeyFields
else
cFieldName:=Column.FieldName;
if DataSet is TClientDataSet then begin
// TClientDataSet(DataSet).IndexFieldNames:=Column.FieldName;
if TClientDataSet(DataSet).indexfieldnames<>'' then
begin
i:=TClientDataSet(DataSet).IndexDefs.IndexOf('i'+Column.FieldName);
if i=-1 then
begin
with TClientDataSet(DataSet).IndexDefs.AddIndexDef do
begin
Name:='i'+Column.FieldName;
Fields:=Column.FieldName;
DescFields:=Column.FieldName;
end;
end;
TClientDataSet(DataSet).IndexFieldNames:='';
TClientDataSet(DataSet).IndexName:='i'+Column.FieldName;
Column.Title.Caption:='▼'+Column.Field.DisplayName;
end
else
begin
TClientDataSet(DataSet).IndexName:='';
TClientDataSet(DataSet).IndexFieldNames:=column.fieldname;
Column.Title.Caption:='▲'+Column.Field.DisplayName;
end;
end;

排序倒是没问题了,但是排序以后,第一次选择的行总出错,例如:
没有排序之前选择了第5行cell,排序以后第5行变成第8行,可是之前选择的cell跳到表头了,不在8行上,但是行标记的那个三角形却仍然在8行上,这样,当我再选择另一行时,就会莫名其妙的选到别的行上去,怎么解决啊?


本人新手,望高人指点。解答者人人有分。谢谢。
...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
hoho5999
数据库相关 2,508 成员 88,437 内容