我需要对现有的DBGrid组件进行代码更改,以便在Shift + Click和Shift + KeyDown上选择行。以下是我到目前为止为KeyDown做的事情:
if (Key = VK_DOWN) and (ssShift in Shift) then
begin
if not myDataset.Eof then
begin
myDataset.Next;
end;
end;
但是上面的代码没有选择整行。它只会突出显示它下面的单元格。 如何修改此代码,以选择整行? 如何为Shift + Click执行此操作?
答案 0 :(得分:1)
您需要在DBGrid中设置几个选项:
dgRowSelect
= True
dgMultiSelect
= True
dgRowSelect
表示选择整行,而不是单个单元格。对您而言,这可能无关紧要的缺点是失去了在网格中进行就地编辑的能力。
完成这些更改后,您会发现您不需要KeyDown处理程序中的代码。事实上,如果你把它留在里面,你会发现它会跳过其他每一行,所以你最终得到一个斑马条纹网格。
`dgMultiSelect'允许您通过按住Shift键与向下或向上键同时将选择从单行扩展到多行。
但是,您现在说要进行就地编辑,这与将dgRowSelect设置为True不兼容。问题在于,自定义绘制DBGrid的单元格的范围有限,而不会遇到麻烦的批次,ime。但是,以下内容可能适用于您的目的。
在您的网格中,请确保DefaultDrawing
设置为True
并且网格的Options
设置如下:
Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit, dgMultiSelect]
您应该会发现,当您单击一行时,整个行将被“突出显示”,而不仅仅是聚焦的单元格。但是,就地编辑器仍然可以在聚焦单元格上工作,您仍然可以使用Shift +向上或向下将行选择扩展到多行。
使用Shift + Click执行某些操作是错误的。我假设您要将选择从当前行扩展到Shift-Click中的行?我认为你应该发布一个单独的q,因为它是一个不同点。