cxgrid多行操作问题

ck_邬 2009-08-03 11:19:59
我现在用了一个循环所有选中行(i是循坏的数),再改变某一列的值(那一列是Combobox属性),如下代码。。

cxGrid2DBBandedTableView1.DataController.Controller.SelectedRecords[i].Values[4]:='test111';

表面上值是改变的,但只要我把鼠标点在那一列上,显示是还是旧的那个值。。
实际数据还是没有改变。。数据源我是设了ltBatchOptimistic模式的..
...全文
221 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
深宇 2009-08-03
  • 打赏
  • 举报
回复
这个我是循环两次实现的,第一次从grid那里获取ID值,第二次用ID值locate dataset里的记录,然后修改。我也想知道一个简洁快速的方法!期待高手出现!


--------------------------------------------
欢迎各位有空踩一下我的博客
ck_邬 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]
去的该行的数据记录的id字段值,然后根据这个id去update数据库中的记录,最后刷新数据
[/Quote]我用了ltBatchOptimistic模式就是不想立即更新数据库~
bdmh 2009-08-03
  • 打赏
  • 举报
回复
去的该行的数据记录的id字段值,然后根据这个id去update数据库中的记录,最后刷新数据
ck_邬 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lgx0914 的回复:]
改数据集的值
[/Quote]我也知道啊.具体怎么操作才是重点啊..
lgx0914 2009-08-03
  • 打赏
  • 举报
回复
改数据集的值
lgx0914 2009-08-03
  • 打赏
  • 举报
回复

try
数据集.DisableControls;
//你的代码
finally
数据集.EnableControls;
end;
ck_邬 2009-08-03
  • 打赏
  • 举报
回复
我用以下代码搞定了~~但是速度有点慢..谁有高效一点的方法啊?

cxGrid1BandedTableView1.DataController.UpdateData;
if AItem.EditValue<>'' then begin
id:=cxGrid1BandedTableView1.Controller.FocusedColumn.Index;
for i:=0 to cxGrid2DBBandedTableView1.Controller.SelectedRecordCount-1 do begin
with dmMain.ADOQy do begin
if Active then Close;
SQL.Clear;
SQL.Add('select top 1 par_udf1_nv,par_udf2_nv from tb_parameter where par_parent_nv=''Shift'' and par_descc_nv='''+AItem.EditValue+'''');
Open;
if not IsEmpty then begin

cxGrid2DBBandedTableView1.Controller.FocusedRow:=cxGrid2DBBandedTableView1.Controller.SelectedRows[i];
cxGrid2DBBandedTableView1.Columns[id].EditValue:=AItem.EditValue;
cxGrid2DBBandedTableView1.Columns[id+3].EditValue:=FieldValues['par_udf1_nv'];
cxGrid2DBBandedTableView1.Columns[id+4].EditValue:=FieldValues['par_udf2_nv'];

end;
end;
end;
end;
lgx0914 2009-08-03
  • 打赏
  • 举报
回复

var
n,Row:Ineteger;
SqlStr :string;
begin
n:=cxGridDBQuery.GetColumnByFieldName('AssBarCode').Index;// AssBarCode 字段名字
for Row:=0 to cxGridDBQuery.DataController.GetSelectedCount - 1 do
begin
D :=cxGridDBQuery.DataController.GetSelectedRowIndex(Row);
ACode :=cxGridDBQuery.ViewData.Rows[D].Values[n];
SqlStr :=SqlStr +' or AssBarCode='''+ACode+'''';
showmessage(sqlstr);
//下面你可以定位数据集,然后再修改ID值
end;
end;
lgx0914 2009-08-03
  • 打赏
  • 举报
回复
遍历你选择的所有行,然后取出当前行的标识列,再根据标识列Locate定位到数据集,然后修改combobox的ID
ck_邬 2009-08-03
  • 打赏
  • 举报
回复
高手们快来帮下忙啊..现在就卡在这里了..

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧