如果不想原表中增加一个字段,可以使用临时表,我就是这样做的使用adoquery增加一个varchar(1)字段,初始为空 adoquery.sql := select ' ' as Checked * into #tmptalbe from table1 where ...select * from #tmptable 点击的时候修改Checked值: adoquery.edit; if ((Column.fieldname = Checked) and (adoquery.fieldbyname("checked").asstring = " ")) then adoquery.fieldbyname("checked").asstring = "Y" else if ((Column.fieldname = Checked) and (adoquery.fieldbyname("checked").asstring = "Y")) then adoquery.fieldbyname("checked").asstring = " " 根据Checked值重画
cxGrid也可以
1、sql语句改一下:select cast(0 as bit) as isSelected, .....
2、用DBGrid的MutiSelect,
不过用起来稍微有些繁琐
ado控件的话,查询后需要FieldByName('isSelected').ReadOnly := False;否则,改不了的。
数据集要设成可写,缓存更新(如果 要提交修改的话,要注意一下isSelected字段)。
BDE的TQuery,设CachedUpdates := True;
ADO,设LockType := ltBatchOptimistic;
adoquery.sql := select ' ' as Checked * into #tmptalbe from table1 where ...select * from #tmptable 点击的时候修改Checked值:
adoquery.edit;
if ((Column.fieldname = Checked) and (adoquery.fieldbyname("checked").asstring = " ")) then
adoquery.fieldbyname("checked").asstring = "Y"
else
if ((Column.fieldname = Checked) and (adoquery.fieldbyname("checked").asstring = "Y")) then
adoquery.fieldbyname("checked").asstring = " "
根据Checked值重画