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 的状态



