ASP.NET DataView 或 Repeater 中的 CheckBox 命令






4.95/5 (23投票s)
描述了一种在 GridView 或 Repeater 中使用 CheckBox 的非常简单的方法,类似于使用 Button。
- 下载源代码 - 1.05 KB (单个 ASPX 文件)
引言
本文描述了一种在 GridView
或 Repeater
中使用 CheckBox
的非常简单的方法,类似于使用 Button
。 这解决了 CheckBox
(CheckBoxField
) 中缺少 "CommandName
" 属性的问题。
用例
用户浏览一个项目列表,需要一种快速标记某些项目的方法。 例如,指示哪些项目已完成(或已验证)。 并且可能在完成时更新 DateCompleted
字段。
在这种情况下,取消选中会将状态更改回“未完成”,并可能清除 DateCompleted
字段。
ASP.NET 的限制
实现类似结果的标准方法是使用带有指定 CommandName
的 Button
(或 LinkButton
)。 GridView
(Repeater
的 OnItemCommand
) 的 OnRowCommand
事件处理程序将处理对此按钮的 Click
。 然后,您可以在这些处理程序中通过 e.CommandArgument
轻松访问记录 ID。
在许多类似上述的情况下,使用 CheckBox
会更可取——它更紧凑,并且清楚地指示了当前状态。 但是由于 CheckBox
没有 "CommandName
" 属性,并且 CheckedChanged
事件在 OnRowCommand
(Repeater
的 OnItemCommand
) 中未处理,我们如何获取复选框行的记录 ID,以便正确处理该事件?
解决方案
这再简单不过了:只需将记录 ID 分配为 CheckBox
的 Text
属性,然后通过 CSS 隐藏文本即可。
示例
示例包含一个 ASPX 文件,其中包含绑定到具有列 {ItemID int, ItemDescription string, Flag bool}
的 DataTable
的 GridView
和 Repeater
。
GridView
和 Repeater
都包含一个包含 CheckBox
的 TemplateField
。
整个技巧在于 Text='<%#Eval("ItemID")%>'
。 请注意,ItemID
是隐藏的,因为 CheckBox
的 Text
属性呈现为 <label>
,我们使用此样式隐藏它
事件处理程序现在可以轻松访问当前记录 ID 和 CheckBox
的状态