网格前加CheckBox栏位(100分)

  • 主题发起人 主题发起人 WilliamGui
  • 开始时间 开始时间
W

WilliamGui

Unregistered / Unconfirmed
GUEST, unregistred user!
做一个选择单据的对话框,对话框放网格显示待选的单据<br>但如何在网格前加CheckBox栏位,用户可勾选,再点击确定按钮<br>大家说说思路<br><br>已尝试过:<br>Table不允许加无用的字段<br>计算字段不能修改
 
可以用ListView啊。把额外的信息存在Data里
 
DBGridEh中带有checkbox设置Checkboxes-&gt;True,KeyList写入YES和NO;<br>设置query控件连接一个UpdateSQL控件;<br>将query控件的CachedUpdates设置为True,就可以对设置的复选框操作了。
 
楼上的说的对,KeyList写入0和1也可以
 
我用的就是EhLib,新增的栏位,我不想指定字段
 
gz这个问题,顶一下,我也想知道
 
listview, rzstringgrid,ehlib,advstringgrid,感知,非感知都有
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3692151
 
不明白,我举个例,大家说说如何实现<br>一个客户Table,有两个字段ItemNo, ItemName<br>现在在销售订单功能里需要选择物品,这个选择是个对话框,显示为:<br>&nbsp; 选择 物品编号 &nbsp;物品名称<br>&nbsp; [ ] &nbsp;001 &nbsp; &nbsp; &nbsp; aaaaaaaaaaaaaa<br>&nbsp; [ ] &nbsp;002 &nbsp; &nbsp; &nbsp; bbbbbbbbbbbbbb<br>其中,选择是给用户勾选的,用户可以勾多个,<br>如何实现
 
可以动态在dataset和DBgrideh中分别添加选择的字段。此字段与数据库无关,是临时字段。<br>dataset.fieldDef.add();
 
To leader47:<br>&nbsp; 添加后,不能勾选,即这个假字段是只读的
 
用AdvStringGrid。<br>1、AddCheckBoxToColOfGrid(grdCheck, [0]);<br>procedure AddCheckBoxToColOfGrid(AdvStringGrid: TAdvStringGrid; ACols: Array of Integer);<br>var<br>&nbsp; i, ARow: Integer;<br>begin<br>&nbsp; with AdvStringGrid do<br>&nbsp; for ARow := 1 to RowCount - 1 do<br>&nbsp; begin<br>&nbsp; &nbsp; for i := Low(ACols) to High(ACols) do<br>&nbsp; &nbsp; &nbsp; if Cells[ACols,ARow] = '1' then<br>&nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; AddCheckBox(ACols, ARow ,True, False);<br>&nbsp; &nbsp; &nbsp; &nbsp; Cells[ACols,ARow] := '' ;<br>&nbsp; &nbsp; &nbsp; end else<br>&nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; AddCheckBox(ACols, ARow ,False, False);<br>&nbsp; &nbsp; &nbsp; &nbsp; Cells[ACols,ARow] := '' ;<br>&nbsp; &nbsp; &nbsp; end;<br>&nbsp; &nbsp; end;<br>end;<br>2、双击事件<br>procedure TfrmConAndDev_Check.grdCheckDblClickCell(Sender: TObject; ARow,<br>&nbsp; ACol: Integer);<br>begin<br>&nbsp; if (ARow &gt; 0) and (Cells[1, 1] &lt;&gt; '') then<br>&nbsp; begin<br>&nbsp; &nbsp; ToggleCheckBox(0, ARow);<br>&nbsp; &nbsp; GetSelectedInfo;<br>&nbsp; end;<br>end;<br>3、procedure TfrmConAndDev_Check.GetSelectedInfo;<br>var<br>&nbsp; i: Integer;<br>&nbsp; SelCount: Integer;<br>&nbsp; AStatue: Boolean;<br>begin<br>&nbsp; for i := 1 to grdCheck.RowCount - 1 do<br>&nbsp; begin<br>&nbsp; &nbsp; grdCheck.GetCheckBoxState(0, i, AStatue);<br>&nbsp; &nbsp; if AStatue then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; Inc(SelCount);<br>&nbsp; &nbsp; &nbsp; ...<br>&nbsp; &nbsp; end;<br>&nbsp; end;<br>end;
 
把选中栏的字段设置成布尔类型的
 
我用得是DBGridEh,大家有什么好建议
 
这个问题我最近也遇到了,我的解决方法是:<br>在需要勾选的表中增加一个BOOLEAN字段,我用的SQL SERVER 没有这个,我用的是INT字段。然后在dbgrideh中增加这个字段,类型选为checkbox,这样一来,在dbgridh中chedked这个字段,会自动更改数据库中的内容为1,否则为0.然后检索表中所有该字段为1的记录就是用户选选择的记录。处理完成之后,用语句将该字段清0即可。
 
告诉大家,我想到一种方法,应该可以解决<br>与fstar的方法类似,不过更好<br><br>增加一张表,这个表只有一个字段,一行记录<br>写select时cross join这个表怎么的,就可以啦
 
为什么很多问题都是自己解决的
 
没注意看你的要求,你的方法更好。我在我的表里加了个无用的字段,哈哈。。。
 
to fstar:<br>如果感兴趣可以加入我办的群 17375641 中国ERP, 讨论Delphi问题<br>加入请注明
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部