You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:45:47