如何在RadGrid中为复选框列实现批量编辑并修复状态异常
RadGrid批量编辑复选框列状态异常修复
问题现象
RadGrid的复选框列启用批量编辑后,ItemTemplate可根据数据库返回的1/0正确显示“Yes”/“No”,但点击单元格进入编辑状态时,无论原显示值为“Yes”还是“No”,复选框始终处于选中状态,不符合预期。
原代码
<telerik:GridTemplateColumn HeaderText="Locked?" UniqueName="Locked" DataField="LockedInd" SortExpression="LockedInd"> <ItemTemplate> <asp:Label ID="lblLocked" runat="server" Text='<%# Convert.ToBoolean(Eval("LockedInd")) ? "Yes" : "No" %>' /> </ItemTemplate> <EditItemTemplate> <asp:CheckBox runat="server" ID="chkLock" Checked='<%# Bind("LockedInd")%>'/> </EditItemTemplate> </telerik:GridTemplateColumn>
问题原因
数据库返回的LockedInd为数值类型(1/0),直接使用Bind("LockedInd")绑定复选框Checked属性时,RadGrid批量编辑模式下的类型转换逻辑出现异常,无法正确将数值0转换为布尔值false,导致复选框始终被选中。
修复方案
将EditItemTemplate中的复选框绑定改为显式的布尔值转换,确保数值与复选框状态准确映射:
方案1:使用Convert.ToBoolean转换
<telerik:GridTemplateColumn HeaderText="Locked?" UniqueName="Locked" DataField="LockedInd" SortExpression="LockedInd"> <ItemTemplate> <asp:Label ID="lblLocked" runat="server" Text='<%# Convert.ToBoolean(Eval("LockedInd")) ? "Yes" : "No" %>' /> </ItemTemplate> <EditItemTemplate> <asp:CheckBox runat="server" ID="chkLock" Checked='<%# Convert.ToBoolean(Eval("LockedInd")) %>'/> </EditItemTemplate> </telerik:GridTemplateColumn>
方案2:使用三元表达式明确判断
如果需要更直观的数值映射,可直接判断数值是否为1:
<EditItemTemplate> <asp:CheckBox runat="server" ID="chkLock" Checked='<%# (int)Eval("LockedInd") == 1 %>'/> </EditItemTemplate>
两种方案都能确保编辑状态下复选框的选中状态与ItemTemplate显示的“Yes”/“No”保持一致,同时支持批量编辑时的数值回传与保存。
内容的提问来源于stack exchange,提问作者Amal
相关产品推荐
相关产品推荐

