- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果您在运行时在现有列之间添加新列,则子项索引不会像我想象的那样。
例如在第二列和第三列之间添加新列后,列/子项如下所示:
colums[0] | colums[1] | (new) columns[2] | columns[3]
caption | subitems[0] | subitems[2] | subitems[1]
但我假设:
colums[0] | colums[1] | (new) columns[2] | columns[3]
caption | subitems[0] | subitems[1] | subitem[2]
我需要能够在某些条件下动态更新子项的内容。这就是为什么我想依赖这样的假设:Column.Index = X 的列的子项位于 Item.SubItems[X-1]。
您认为这是默认且指定的行为吗?如果是这样,您建议如何根据列更新子项目。一种可能性可能是保存属于最近添加的列的子项索引。
注意:Columns.Tag 属性已在使用中。
我正在使用 Delphi XE 和 XE2,但我需要与 Delphi 7 及更高版本兼容。
最佳答案
您不需要保存索引位置,您可以随时向 ListView 控件本身询问列的原始位置:
procedure TForm1.Button1Click(Sender: TObject);
var
ColumnOrder: array of Integer;
begin
SetLength(ColumnOrder, ListView1.Columns.Count);
ListView_GetColumnOrderArray(ListView1.Handle, ListView1.Columns.Count,
PInteger(ColumnOrder));
对于问题中的示例,ColumnOrder
数组将保存 (0, 1, 3, 2)。如果我们要更新新插入列(左起第三列)的子项,那么它的原始位置是“3”。代码示例:
var
ColumnOrder: array of Integer;
SubIndex: Integer;
begin
SetLength(ColumnOrder, ListView1.Columns.Count);
ListView_GetColumnOrderArray(ListView1.Handle, ListView1.Columns.Count,
PInteger(ColumnOrder));
SubIndex := ColumnOrder[2]; // We want to update 3rd column from left
// (visually -> SubItems[1])
// Test if the index is not 0, otherwise it holds an *item*,
// not a subitem (the first column can change position too).
if SubIndex > 0 then begin
Dec(SubIndex); // VCL subitems are 0 based
ListView1.Items[1].SubItems[SubIndex] := 'updated!';
end;
请注意,如果您要添加列而不仅仅是对现有列重新排序,则只有在修复了 other question 中的错误后,此操作才有效。 (如果您不这样做,则根本不可能同时提供列重新排序和列添加功能)。
关于默认行为是否应该如此,假设您有一个 ListView ,您正在显示包含“名称”、“大小”、“日期”列的文件信息。作为开发人员,您不应该担心用户可能将“大小”列放在何处,只需将信息放入“SubItems[0]”即可。此外,如果用户拖动“名称”列,它是否会从项目降级为子项目。
我认为期望项目/子项目遵循各自的列是合乎逻辑的。
关于delphi - TListView : Subitem order after adding a new column between existing during runtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8327500/
我在 SQL 查询中使用了一个简单的 IF NOT EXISTS/WHERE NOT EXISTS 语句(我都尝试过),但我总是收到 mysql 错误,不知道为什么。尝试使用不同的引号,检查我的 My
我有 2 个表:tbl1 和 tbl2。我想从 tbl1 返回一行,其中包含以下列:col1、col2、col3、can_be_deleted 、有重要项目。这个想法是,can_be_deleted
如果您是 "t1".persona_1_id = 2,则预期结果应返回 persona_id = 4。 like --- id persona_1_id persona_2_id liked 1 2
我遇到了这个用于执行幂等插入的 github SQL 代码示例。完全按照我想要的方式工作。我不想使用 EXISTS,因为我觉得它有点困惑。可以使用联接对相同的操作进行编码吗? 下面是我在 github
public bool CheckTblExist(string TblName) { try { string cmTxt = "s
表1 Id Name DemoID 1 a 33 2 b 44 3 c 33 4 d 33 5 e 44 表2 Id DemoID IsT
我对 SQL 非常陌生。我想知道当我使用“IF EXISTS”或“IF NOT EXISTS”时会发生什么。例如:以下两个语句有什么区别: 语句 1:(存在) IF EXISTS( SELECT OR
我正在更新 exist-db 集合中的 XML 文件,我必须检查是否存在 id 以决定是否必须在我的文档中替换或插入某些内容。 我注意到随着文件的增长,查询执行时间显着恶化,我决定为我的文件添加一个索
我有一个正在尝试更新的数据库,但我不明白为什么会收到有关不存在的列的奇怪错误。当我使用“heroku pg:psql”访问数据库时,我完全可以看到该列。我找到了couple其他questions遇到类
我有一个这样的查询 SELECT ... FROM ... WHERE (SELECT EXISTS (SELECT...)) which did not return anything th
我有一个可以对数据库执行插入和更新的程序,我从 API 获取数据。这是我得到的示例数据: $uname = $get['userName']; $oname = $get['offerNa
我的批处理文件中有这个脚本 -- if not exist "%JAVA_HOME%" ( echo JAVA_HOME '%JAVA_HOME%' path doesn't exist) -
有没有办法让 Directory.Exists/File.Existssince 区分大小写 Directory.Exists(folderPath) 和 Directory.Exists(folde
考虑使用这两个表和以下查询: SELECT Product. * FROM Product WHERE EXISTS ( SELECT * FROM Codes
我正在使用 Subclipse 1.6.18 使用 Eclipse 3.72 (Indigo) 来处理 SVN 1.6 存储库。这一切都在 Ubuntu 下运行。 我有一个项目,在我更新我的 Ecli
我正在尝试使用 Terraform 配置 Azure 存储帐户和文件共享: resource "random_pet" "prefix" {} provider "azurerm" { versi
我有兴趣为需要使用 NOT EXISTS 的应用程序编写查询。子句来检查一行是否存在。 我正在使用 Sybase,但我想知道一般 SQL 中是否有一个示例,您可以在其中编写具有 NOT EXISTS
我正在尝试使用 Terraform 配置 Azure 存储帐户和文件共享: resource "random_pet" "prefix" {} provider "azurerm" { versi
下面是代码示例: CREATE TABLE #titles( title_id varchar(20), title varchar(80)
我曾经这样编写 EXISTS 检查: IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET
我是一名优秀的程序员,十分优秀!