cxGrid批量修改问题..

ck_邬 2009-09-03 09:06:12
我一个cxgrid连着一个datasource,
在多选的时候,我再批量修改值
我用

try
id:=cxGrid1BandedTableView1.Controller.FocusedColumn.Index;
for i:=0 to cxGrid2DBBandedTableView1.Controller.SelectedRecordCount-1 do begin
if not dmMain.ADOQy.IsEmpty then begin
cxGrid2DBBandedTableView1.DataController.SetValue(cxGrid2DBBandedTableView1.DataController.Controller.SelectedRecords[i].RecordIndex,AItem.Index,AItem.EditValue);
end;
end;
ADOSp_Roster.EnableControls;
cxGrid2DBBandedTableView1.EndUpdate;

FreeAndNil(frm);
except
end;

来批量修改值..只要我不滚动,值是改了..但只要我的焦点发生变化,全部数据都还原成修改前的数据了..
...全文
287 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgxyz 2009-09-11
  • 打赏
  • 举报
回复
就是按4楼的做法
先获取GRID上面选中记录的主键值放到一列表里
再根据主键到数据集里再POST本地的记录
到时保存时,再一并提交到数据库里
ck_邬 2009-09-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhao_yong 的回复:]
Delphi(Pascal) codevar
iLoop:Integer;begin
inherited;
cxGrid2.BeginUpdate;
cxGrid2DBTableView1.BeginUpdate;for iLoop:=0to cxGrid2DBTableView1.DataController.GetSelectedCount-1dobegin
cxGrid2DBTableView1.Controller.FocusedRow:=cxGrid2DBTableView1.Controller.SelectedRows[iLoop];
adoq_JB.Edit;
adoq_JB.FieldByName('JBRQ').AsString:=FormatDateTime('yyyy/mm/dd',DT);
adoq_JB.FieldByName('KSSJ').AsString:=FormatDateTime('hh:mm:ss',DtKSSJ);
adoq_JB.FieldByName('JSSJ').AsString:=FormatDateTime('hh:mm:ss',DtJSSJ);
adoq_JB.FieldByName('JBSS').AsString:=FormatDateTime('hh:mm:ss',FlGZSS);
adoq_JB.FieldByName('JBYY').AsString:=StrJBYY;
adoq_JB.FieldByName('JBDD').AsString:=StrID;
adoq_JB.FieldByName('STATUS').AsString:=StrJBLX;
adoq_JB.Post;end;
cxGrid2DBTableView1.EndUpdate;
cxGrid2.EndUpdate;
我是這樣做的,不知道能不能幫得到你,Adoq_JB是連接CxGrid的Adoquery.
[/Quote]
你这种方法我试过了.但到cxGrid2DBTableView1.Controller.FocusedRow:=cxGrid2DBTableView1.Controller.SelectedRows[iLoop];这一句会很慢..所以我取消了这个念头..
zhao_yong 2009-09-11
  • 打赏
  • 举报
回复

var
iLoop:Integer;
begin
inherited;
cxGrid2.BeginUpdate;
cxGrid2DBTableView1.BeginUpdate;
for iLoop:=0 to cxGrid2DBTableView1.DataController.GetSelectedCount -1 do
begin
cxGrid2DBTableView1.Controller.FocusedRow:=cxGrid2DBTableView1.Controller.SelectedRows[iLoop];
adoq_JB.Edit;
adoq_JB.FieldByName('JBRQ').AsString:=FormatDateTime('yyyy/mm/dd',DT);
adoq_JB.FieldByName('KSSJ').AsString:=FormatDateTime('hh:mm:ss',DtKSSJ);
adoq_JB.FieldByName('JSSJ').AsString:=FormatDateTime('hh:mm:ss',DtJSSJ);
adoq_JB.FieldByName('JBSS').AsString:=FormatDateTime('hh:mm:ss',FlGZSS);
adoq_JB.FieldByName('JBYY').AsString:=StrJBYY;
adoq_JB.FieldByName('JBDD').AsString:=StrID;
adoq_JB.FieldByName('STATUS').AsString:=StrJBLX;
adoq_JB.Post;
end;
cxGrid2DBTableView1.EndUpdate;
cxGrid2.EndUpdate;

我是這樣做的,不知道能不能幫得到你,Adoq_JB是連接CxGrid的Adoquery.
ck_邬 2009-09-10
  • 打赏
  • 举报
回复
继续顶上。。
ck_邬 2009-09-04
  • 打赏
  • 举报
回复
真要命啊。。老是没人回答我问题。。
ck_邬 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dinoalex 的回复:]
你只是临时显示?
[/Quote]
我是先把数据以缓存更新的模式显示..
用户修改所有数据并不修改数据库的数据,
当点击保存时才保存修改的数据
dinoalex 2009-09-03
  • 打赏
  • 举报
回复
你只是临时显示?
ck_邬 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dinoalex 的回复:]
再用语句更新. 看似楼主的是用CXGRID来更新吧
[/Quote]
我不能直接更数据库,只能更新数据集..
让我触发某一事件再更新数据库的..
dinoalex 2009-09-03
  • 打赏
  • 举报
回复
再用语句更新. 看似楼主的是用CXGRID来更新吧
dinoalex 2009-09-03
  • 打赏
  • 举报
回复
忘记说SL是一个全局的tstringlist
dinoalex 2009-09-03
  • 打赏
  • 举报
回复
[Code=Delphi(Pascal)]
procedure TMainFrm.cxGrid1DBTableView1SelectionChanged(
Sender: TcxCustomGridTableView);
var
i: integer;
begin
if GetAsyncKeyState(VK_RButton) <> 0then exit;
SL.Clear;
For i:= 0 To cxGrid1DBTableView1.Controller.SelectedRowCount -1 DO
Begin
SL.Append(cxGrid1DBTableView1.Controller.SelectedRows[i].Values[0]);
end; // Values[0] 假设第0列为主键
end;
[/Code]

再根据主键更新就行了
ck_邬 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 smallhand 的回复:]
保存啊!
[/Quote]别那么悬啊..怎么保存啊?
火龙岛主 2009-09-03
  • 打赏
  • 举报
回复
保存啊!
ck_邬 2009-09-03
  • 打赏
  • 举报
回复
怎么我发的贴老是没人回呢..

5,388

社区成员

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

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