Delphi cxGrid表对行的操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi cxGrid表对行的操作相关的知识,希望对你有一定的参考价值。
能不能让CXGrid的某行为只读,也就是无法编辑,不是某列无法修改,我要的是某行为不可编辑的状态。我要代码的。
还有个问题,cxgrid在设置主从表后,在cxgrid右击弹出菜单点‘展开所有’,可以展开,不过在从表里点‘收缩所有’会出错,在主表只点‘收缩所有’就会不出错,我用转移焦点来试好像也不怎么有效果 ,用判断表名是可以,不过有时会被误认为功能失效的。请问还有什么更好的办法,
如果需要条件,代码和如下类似:
if (TableView.Controller.FocusedRecord.Values[需要判断的列] = 值) and (AItem.Index= 第几列) then
AAllow := False
else
AAllow := True; 参考技术A 在mousedown事件里面写:(这个是dbgrideh的代码,cxgrid估计差不多,你自己改改)
if ((Grd.DataSource.DataSet.FieldByName('aa).AsString = 'XXXX')
or (Grd.DataSource.DataSet.FieldByName('aa').AsString = 'ZZZZ') or
(Grd.DataSource.DataSet.FieldByName('bb').AsString = 'NNNN'))
and (Button = mbLeft) then //你自己设置条件
Grd.Columns.Items[0].ReadOnly := True
else
Grd.Columns.Items[0].ReadOnly := False;
补充的问题,你可以试试看,从表有什么属性可以禁止弹出右键菜单没有,如果没有这个属性,你可以自己在点击右键时,自己加个判断,如果是从表,就直接退出,不弹出右键菜单。
通过 postgres 中的连接表对行进行排序
【中文标题】通过 postgres 中的连接表对行进行排序【英文标题】:Ordering rows by joined tables in postgres 【发布时间】:2017-11-09 23:03:07 【问题描述】:我什至很难想出正确的问题标题。我会接受任何建议来编辑它。
我的问题:我有一个包含两个模型的应用(工作板):User、Job。用户可以有很多工作,工作可以是premium
或free
。作业也可以过期或活动。如果valid_until
参数IS NOT NULL
则它们处于活动状态,否则它们已过期(我有一个后台作业每天自动设置)。
我正在尝试选择拥有活跃职位的用户,但我希望拥有高级职位的用户排在拥有免费职位的用户之前,假设用户可以同时拥有活跃的高级职位和免费职位发布。
SELECT DISTINCT users.id, users.email FROM users
LEFT OUTER JOIN jobs ON jobs.owner_id = users.id
WHERE jobs.valid_until IS NOT NULL;
上面的查询正确地选择了至少有一个活动工作(高级或免费)的用户,我只需要根据工作表对用户进行排序。我将不胜感激任何帮助/提示。谢谢!
【问题讨论】:
您不希望用户根本没有工作,因此您应该使用(内部)联接而不是左联接。这里 left join 是可行的,因为碰巧您对活动/有效工作的测试会消除那些失业用户。但是如果你要求 jobs.valid_until IS NULL 你也会得到失业用户。左连接返回内连接返回的内容加上由空值扩展的不匹配的左表行。 【参考方案1】:我相信以下内容会满足您的需求:
SELECT users.id, users.email FROM users
JOIN jobs ON jobs.owner_id = users.id
WHERE jobs.valid_until IS NOT NULL
GROUP BY users.id, users.email
ORDER BY min(case when jobs.type = 'premium' then 1 else 2 end)
我看不到包含 Premium
与 Free
的字段的名称,所以我编了一个!另外,我将您的JOIN
更改为INNER JOIN
,因为WHERE
子句在任何情况下都有这种效果。
【讨论】:
我不明白你在没有任何聚合函数的情况下使用GROUP BY
clause...
@Arkhena,ORDER BY 中的聚合需要它...还删除重复项,因此不需要 DISTINCT。以上是关于Delphi cxGrid表对行的操作的主要内容,如果未能解决你的问题,请参考以下文章
Delphi - cxGrid添加DB Banded Table
三步轻松搞定delphi中CXGRID手动添加复表头(多行表头,报表头)