DBGRID简单问题(100分)

  • 主题发起人 主题发起人 张林林
  • 开始时间 开始时间

张林林

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DELPHI4.0的DBGRID显示了12个字段
1。希望鼠标点击第一个字段(MARK)时,在此字段中写入‘*’点击其他字段不发生此操作。
2。怎样在点标题栏就能自动进行排序,且自动加上序号,在另一字段显示(RANK).
 
看的我晕头转向,详细点。
 
1.MARK字段是一条纪录的选中字段,如果点击一条纪录的此字段,则表示选中。点击其他字段不发生此操作。
2。怎样在点标题栏就能自动进行排序,且自动加上序号,写入另一字段(RANK).
 
在dbgrid中的keypress事件中写下面的话。
if dbgrid.selectfield.fieldname='MARK' then
query1.fieldbyname('MARK').ASSTRING:='*';

 
然后在dbgrid中的ontitleclick事件中根据相应的column改变sql语句以之排序,
最后扫一次从头扫一次数据,在另一个字段中写入相应的序号就行了。
:》
 
我是
procedure TQKK.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if dbgrid1.selectfield.fieldname = 'MARK' then
kxb.HalcyonDataSet1.fieldbyname('MARK').ASSTRING:='*';
END;
提示错误
Undeclared indentifier:'selectfield'
 
在你的Use语句加入DB就可以了
SelectField是TField类的,在DB单元中。
还要排序的话,我现在是用存储过程来实现的,首先用selectfield找出字段名
而后将字段名作为参数输入到存储过程中,存储过程中就用该字段名进行order by
其他方法还不是很清楚
 
Use中已经有DB了,也提示同样的错误
 
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if Column.Field.Name = 'MARK' then
query1.fieldbyname('MARK').ASSTRING:='*';

end;
在OnCellClick 中写。
 
2.rxlib 的rxdbgrid有此功能
 
写错了吧:selectedfield(not selectfield);
oncellclick事件中
begin
if dbgrid1.selectedfield.fieldname = 'MARK' then
begin
query1.edit;
query1.fieldbyname('MARK').ASSTRING:='*';
query1.post;
end;
end;
 
唉,当然是selectedfield 了,打快了嘛。
 
我是
procedure TQKK.DBGrid1CellClick(Column: TColumn);
begin
if column.FieldName = 'MARK' then
begin
WITH kxb.HalcyonDataSet1 do
BEGIN
Edit;
IF FieldByName('MARK').Asstring = '√' THEN
FieldByName('MARK').Asstring := ''
ELSE FieldByName('MARK').Asstring := '√';
post;
END;
end;
end;

'√'打上了,可是表格中我所标记的纪录都会出现两次,并且表格不停的跳动,
比如我只点击了第一条,记录就跳到第三十多条,这时表格中除了第一条被选中且打'√'外
还会凭空又加入一条和第一条一模一样的纪录,也被选中且打'√'。
 
是不是我的表格有索引造成的,去了索引就可以了,但是我又不能没有索引。
不用索引的话,每次是不是用查询,查询语句怎么用?我的纪录有20万条以上

procedure TQKK.DBGrid1TitleClick(Column: TColumn);
var
x: Integer;
TheField : String;
begin
x := Column.Index;
TheField :=column.FieldName;
// TheField := Query1.Fields[x].FieldName;
with Query1 do begin
Active := FALSE;
Sql.Clear;
Sql.Add('Select * from qkpx.dbf order by '+TheField);
Active := TRUE;
end;
end;

提示bde错误,是不是因为我的库有索引造成的。
 
很有可能,我的建议是换个控件。如用label来试试先,
看一下是数据库的问题还是控件的问题,我想多半是数据库本身的问题,
你找问题的方向搞错了
 

提示错误为:‘Corrupt table/index header’
 
1.如欲通过鼠标点击该Mark字段赋值最好在 DblClick事件中:
if DBGrid1.SelectedField.FieldName='MARK' then
With DBGrid1.DataSource.DataSet do
begin
Edit;
FieldByName('MARK').AsString:='*';
end;


 
我的SQL语句有什么错?老查不出来
 
试试infopower2000的dbgrid控件,其demo 程序有你要的功能:点标题栏就能自动进行排序
 
我的是delphi4.0
 

Similar threads

D
回复
0
查看
825
DelphiTeacher的专栏
D
D
回复
0
查看
831
DelphiTeacher的专栏
D
D
回复
0
查看
909
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
704
DelphiTeacher的专栏
D
后退
顶部