dbgrid 多选(100分)

  • 主题发起人 主题发起人 delphifaq
  • 开始时间 开始时间
D

delphifaq

Unregistered / Unconfirmed
GUEST, unregistred user!
利用dbgrid的multselect选择多个记录后
怎么得到被选择的记录?
 
简单,给你一段代码,看看就明白了
 
dbgrid1.SelectedRows 可以访问已被选择的行。
 
这是我以前的程序里的一段代码, 完成的任务是将DBBRID的多选行一次删除


var tempBookMark : TbookMark;
begin
If dbgrid1.SelectedRows.Count > 1 Then s := '真的要删除这些记录?'
If application.MessageBox(pchar(s), 'CVSC--多媒体光盘检索播放', mb_iconinformation + mb_YesNo) = IdYes Then
Begin
i := 0;
DBGrid1.Datasource.Dataset.DisableControls;
While i <= dbgrid1.SelectedRows.Count - 1 Do
Begin
DBGrid1.Datasource.Dataset.Bookmark := dbgrid1.SelectedRows.Items; //重要的在这里,取得BOOKMARK
TempBookmark := DBGrid1.Datasource.Dataset.GetBookmark;
DBGrid1.Datasource.Dataset.GotoBookmark(TempBookmark);
qry_del.ParamByName('param1').AsInteger := Dbgrid1.DataSource.DataSet.fieldbyname('id').AsInteger;
qry_del.Prepare;
qry_del.ExecSQL;
DBGrid1.Datasource.Dataset.FreeBookmark(TempBookmark); //释放BOOKMARK
inc(i); //下一个选择记录
End;
DBGrid1.Datasource.Dataset.EnableControls;
End;
end;
 
当然用selectedrows
另:王寒松的程序用dbgrid1.selectedrows.delete就可完成任务。
 
谢谢大家! 我是第一次来这里提问题
另还有一小问题
用table.fieldbyname('实数字段').asfloat:=实数
后 字段内的实数的小数位数变多 并不为0
例 5.0变为5.00000098 怎么解决
注 为.db库
 
1、强烈推荐 INFO POWER
2、实数不精确,是近似值,换类型吧
 
打开你的BDE 管理器
在对应的数据别名上可以看到 Enable BCD 选项
把这项变成FALSE
就可以解决5。0=5。0000098的问题
 
delphi ' grid is bad!
 
Enable BCD 选项 已经为False
CJ 换什么类型呢 其中有小数计算
 
把DisplayFormat改一下,可以显示正确值;
具体解决可参考呆非4的有关问题“2.7变成了....”
 
1.对于实数问题,可以使用format格式
format('%3.2f',实数);
2.多选中如果是处理删除操作可以使用
dbgrid.selectrows.delete可删除对应多项记录,如果是另存被选记录
则使用书签.
var
temp:bookmark;
begin
for i:=0 to dbgrid.selecterows.count-1 do begin
temp:=dbgrid.selectrows.items;
table1.gotomark(temp);
for j:=0 to table.fieldcount-1 do
保存当前记录
table1.freebookmark(temp);
end;
即可处理
 
后退
顶部