与 dbgrid 相关的问题

Luckyfeeling 2001-06-23 10:37:00
我如何给 dbgrid 额外增加一列(该列没有相对应的字段〕,
该列的作用是标识相应的行是否执行某些操作。
比如:
当书籍数量<100 时 ,特殊标识列符号为 × 否则为 *
书籍数量 特殊标识列
120 *
80 ×
然后,将 dbgrid 断开与数据库的链接,将所有的书籍都减去 40 ,结果为

书籍数量 特殊标识列
80 ×
40 ×
特殊标识列没有相应的字段,我如何对它赋值????
企盼您的帮助!!
...全文
99 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Luckyfeeling 2001-06-25
  • 打赏
  • 举报
回复
谢谢大家的帮助!
这个问题可以结了!
总之,dbgrid 帮定的太死了,如果能允许我们自由的添加更改行列
就好了!
gao277 2001-06-23
  • 打赏
  • 举报
回复
就是用计算字段,在oncalafield事件中根据书籍数量对特殊标志列操作,
路人丁 2001-06-23
  • 打赏
  • 举报
回复
使用计算字段!
双击dbgrid 之后看看各个属性!
ghz2000 2001-06-23
  • 打赏
  • 举报
回复
这个应该是一个计算字段。好好想想
chenjun 2001-06-23
  • 打赏
  • 举报
回复
你在数据库中增加一个字符字段不就可以很容易解决了吗
windindance 2001-06-23
  • 打赏
  • 举报
回复
不,只要把结果字段设置为Calculated。(一般自动会设置的)
qing_zb 2001-06-23
  • 打赏
  • 举报
回复
是不是要把参与计算的字段都设为Calculated?
光明山人 2001-06-23
  • 打赏
  • 举报
回复
应该在TTable或TQuery对象中加计算字段对象,不需要改数据库或在SQL中加一计算字段。做法如下:

双击TTable或TQuery对象,打开字段编辑器(fields editor),按Ctrl+N或右击选"New field...", 在"New Field"对话框中填入字段名(如Flag),类型(String),大小(2),选中“Field Type”中的Calculated。

在TTable或TQuery对象的OnCalcFields事件中写:

if DataSet.FieldByName( '书籍数量' ).IsNull or DataSet.FieldByName( '书籍数量' ).AsInteger<100 then
DataSet.FieldByName( 'Flag' ).AsString := '×'
else
DataSet.FieldByName( 'Flag' ).AsString := '*';

楼上的后半部分跟我的一样,但前半部分不对,不能用SQL的计算字段。Delphi不会认它作计算型
字段的,只会认为它也是数据库中字段。在OnCalcFields中只能给FieldKind为fkCalculated的字段赋值,否则它会以为是修改数据。

Luckyfeeling 2001-06-23
  • 打赏
  • 举报
回复
dephi 在这点处理上真令人失望!!!
我问题的本意是从数据库里面都取数据,然后断开与数据库的链接
用户对某些行进行操作,我需要额外的一列或多列来标明它们,额外的行也未必就是计算字段
我举的例子,可能描述不清吧。

zou5655(周围) 的解决办法与我的作法一样!
如果 dbgrid 直接允许我们操作相应格子里面的数据,而不像现在强迫我们非要操作帮定的字段
就好了!
这个问题,在 vb 的 msflexgrid里面非常简单,它允许直接读写相应格子里面的数据,但不必更新数据库。
总之,我认为 dephi 里面 dbgrid 功能是好,但帮定的太死了,可选择的太少了。
像 stringgird 又太不好用了。
在 vb 里面,令 grid.datasource=记录集之后,就可以对 格子任意操作,包括添加任意行任意
列,添加或更改任意数据。
这也可能与我的水平有关,只好再慢慢的发掘吧。
这个问题如果没有更高明的解决手段,就可以了段了!

谢谢上面朋友的热情参与与帮助!!!!!!!!!!!
zou5655 2001-06-23
  • 打赏
  • 举报
回复
例如:
表结构为:
表名:MYTABLE
字段1:书名 string
字段2:数量 intger
第一步:双击DBGRID添加所有字段,添加新字段,字段名填:标识符;字段类型添:STRING;OK!!
第二步:执行一句SQL语句“Select *,"" 标识符 From MyTable”
第三步:在QUERY1控件的oncalafield事件中写:
If DataSet.FieldByName('数量').AsInteger < 100 Then
DataSet.FieldByName('标识符').AsString := '×'
Esle
DataSet.FieldByName('标识符').AsString := '*';

5,388

社区成员

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

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