cxgrid 如何关联列

neterr 2010-10-28 11:08:07
在一个小项目中用到cxgrid这个控件,用于显示明细表中的数据,数据库表包含字段:商品代码;颜色代码;规格代码;数量等,然后用cxgrid显示出来的时候,格式希望是:商品代码;商品名称;颜色代码;颜色名称;规格代码;规格名称;数量(数据库中另有有三个表:商品资料表:包括每个商品代码对应该的商品名称及其它一些商品属性;颜色表:包括每个颜色代码对应的颜色名称及属性;规格表:包含每个规格对该的规格名称及属性),在项目中如果用表联接的方法,这当然不是问题,但用这个方法我在插入、删除行及其它操作的时候就很麻烦,容易出错!我在以前用过的BSERP(不知道有没有人用过)系统中看过他们是:先在登录的时候把前三个属性资料表加载好,应该是存在本地数据源中,然后他们的sql是直接查询明细表即可显示,根本不需要联接另三个表,如:select 商品代码,颜色代码,规格代码 from 明细表名 where 条件,所以我想他们应该是通过在cxgrid中关联字段的方式实现,但具体就不知道如何实现,因为我对cxgrid也还不太熟悉!麻烦各位赐教!先谢了!
再上张bserp的截图:
...全文
175 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanterry 2011-10-06
  • 打赏
  • 举报
回复
顶...我也在研究BSERP,呵呵!
kye_jufei 2010-11-04
  • 打赏
  • 举报
回复
level和view可以指定其KeyFieldNames或設定其Properties...
软件钢琴师 2010-11-03
  • 打赏
  • 举报
回复
http://search.download.csdn.net/search/cxgrid%E6%95%99%E7%A8%8Bhttp://search.download.csdn.net/search/cxgrid%E6%95%99%E7%A8%8B

这个教程可以帮助你
Oraclers 2010-11-03
  • 打赏
  • 举报
回复
要實現樓主的目標很簡單。
那列的Properties選LookupComboBox,設置ListSource為你的商品資料表的數據源,KeyFieldNames設為商品代碼,ListFieldNames設置為商品名稱(。。。。。。。根據下拉列表需要還可選擇商品資料表中一些其他字段),ListFieldIndex設為0
以上設置好後就能達到樓主要求。
kye_jufei 2010-10-29
  • 打赏
  • 举报
回复
很明顯的一個主從表項目工程。。。
我共享一個原創的cxgrid實現的KPI績效設定模塊(主從表)實現方法(用的是edit,post):
1.主表顯示KPI各年月主要工作內容說明與項次;(連接主表數據集,主表keyfieldnames為Auid)
2.從表顯示KPI各年月工作內容說明的描述及項次值設定;(連接從表數據集,從表keyfieldnames為TAG_ID,masterkeyfieldnames為Auid)
3.新增部分:(判斷是主表新增還是從表新增,注意焦點)

procedure TRES_KPIMB_F.btnSB_NewClick(Sender: TObject);
begin
inherited;
if FFocus= fMaster then
begin
cbb_orgy.SetFocus;
qry_jd.Append;
qry_jd.FieldByName('SUPER').AsString:=_UserName;
qry_jd.FieldByName('UsrID').AsString:=_UserNo;
ChangeStatusJD(sEdit);
end else
begin
edt_xm.SetFocus;
if not qry_mbop.Active then
qry_mbop.Open;
qry_mbop.Append;
qry_mbop.FieldByName('JD_ID').AsString:=qry_jd.fieldbyname('AuID').AsString;
qry_mbop.FieldByName('UsrID').AsString:=_UserNo;
ChangeStatus(sEdit);
end;
end;


4.刪除部分:(判斷是主表刪除還是從表新增,注意焦點)

procedure TRES_KPIMB_F.btnSB_DelClick(Sender: TObject);
begin
inherited;
if FFocus= fMaster then
begin
if not qry_jd.IsEmpty then
begin
if MessageDlg('你確定要刪除"'+cbb_orgnm.Text+'"的工作說明嗎?',mtInformation,[mbYes,mbNo],0)=idyes then
begin
qry_jd.Edit;
qry_jd.FieldByName('DelStatus').AsString:='1';
CanPost:=True;
qry_jd.Post;
RestData;
end;
end;
end else
begin
if not qry_mbop.IsEmpty then
begin
if MessageDlg('你確定要刪除所選中的KPI項目嗎?'+char(13)+char(13)+qry_mbop.fieldbyname('TAG_PROJ').AsString,mtInformation,[mbYes,mbNo],0)=idyes then
begin
qry_mbop.Edit;
qry_mbop.FieldByName('DelStatus').AsString:='1';
CanPost:=True;
qry_mbop.Post;
RestData;
end;
end;
end;
end;
neterr 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bdmh 的回复:]

关联表的更新不能直接edit...post,需要用update,insert等,别怕麻烦,图省事没好果子吃
[/Quote]
那如果要关联应该怎么操作呢,我想学习下!
bdmh 2010-10-29
  • 打赏
  • 举报
回复
关联表的更新不能直接edit...post,需要用update,insert等,别怕麻烦,图省事没好果子吃
neterr 2010-10-29
  • 打赏
  • 举报
回复
那请问cxgrid属性,level和view如何设置
kye_jufei 2010-10-29
  • 打赏
  • 举报
回复
一個意思,列關聯就要寫sql級聯語句;按照自己的具體需求,關聯出數據就可以了。。。

example:

select a.*,b.* from SYS_LOGINUSER a 
left join Res_User_Temp b on a.ACCOUNT_ID=b.Account_Id
neterr 2010-10-29
  • 打赏
  • 举报
回复
首先谢谢kye_jufei,但我不是要主从表的操作,我是要知道cxgrid的列关联!高手赐教!
neterr 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dinoalex 的回复:]

关键是你关联的两个表都要有主键,那样更新就不会有问题
[/Quote]
嗯,应该是的!主要是我也想研究下bserp的方法!这样更简便!麻烦各位不惜赐教呀!
dinoalex 2010-10-28
  • 打赏
  • 举报
回复
另一种是写相关的存储过程, 即更新的,删除的,插入的. 全都调用存储过程来处理.
dinoalex 2010-10-28
  • 打赏
  • 举报
回复
关键是你关联的两个表都要有主键,那样更新就不会有问题

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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