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

为何无法访问自定义列且设为内嵌编辑模式的Telerik RadGrid控件?

Telerik RadGrid内嵌(Inplace)编辑的核心实现要点

首先,我先把你提供的基础ASPX代码片段补全并整理好(看起来你可能没贴完,我补充了常见的操作列和编辑模式的关键设置):

<div id="Grid"> 
    <telerik:RadGrid RenderMode="Lightweight" runat="server" ID="RadGrid1" 
        AutoGenerateColumns="false" 
        AllowPaging="true" 
        OnNeedDataSource="UserGrid_NeedDataSource" 
        OnUpdateCommand="RadGrid1_UpdateCommand" 
        OnItemCreated="RadGrid1_ItemCreated" 
        OnDeleteCommand="RadGrid1_DeleteCommand"
        DataKeyNames="UserId"> <!-- 必须设置主键字段,方便后续编辑/删除操作定位行 -->
        <MasterTableView EditMode="InPlace"> <!-- 明确指定内嵌编辑模式 -->
            <Columns>
                <!-- 自定义绑定列示例 -->
                <telerik:GridBoundColumn DataField="UserName" HeaderText="用户名" UniqueName="UserName" />
                <telerik:GridBoundColumn DataField="Email" HeaderText="邮箱" UniqueName="Email" />
                <!-- 编辑、删除操作列 -->
                <telerik:GridEditCommandColumn EditText="编辑" />
                <telerik:GridButtonColumn CommandName="Delete" Text="删除" ConfirmText="确定要删除这条记录吗?" />
            </Columns>
        </MasterTableView>
    </telerik:RadGrid>
</div>

接下来,针对你绑定的几个关键事件,我给你提供具体的实现示例,帮你快速完成内嵌编辑的功能:

1. 更新操作(UpdateCommand)

在这个事件里,你需要获取编辑行的输入值,然后执行数据更新逻辑:

protected void RadGrid1_UpdateCommand(object sender, GridCommandEventArgs e)
{
    // 获取当前编辑的行
    var editableItem = e.Item as GridEditableItem;
    if (editableItem == null) return;

    // 获取主键值(依赖RadGrid的DataKeyNames设置)
    string userId = editableItem.GetDataKeyValue("UserId").ToString();

    // 提取各列的编辑值
    string userName = (editableItem["UserName"].Controls[0] as TextBox).Text.Trim();
    string email = (editableItem["Email"].Controls[0] as TextBox).Text.Trim();

    // 这里执行你的更新逻辑,比如更新数据库
    // 示例:UserService.UpdateUser(userId, userName, email);

    // 更新后重新绑定数据
    RadGrid1.Rebind();
}

2. 删除操作(DeleteCommand)

获取要删除的行主键,执行删除逻辑:

protected void RadGrid1_DeleteCommand(object sender, GridCommandEventArgs e)
{
    var dataItem = e.Item as GridDataItem;
    if (dataItem == null) return;

    // 获取主键值
    string userId = dataItem.GetDataKeyValue("UserId").ToString();

    // 执行删除逻辑
    // 示例:UserService.DeleteUser(userId);

    // 删除后重新绑定数据
    RadGrid1.Rebind();
}

3. 编辑项自定义(ItemCreated)

如果需要给编辑控件设置默认值、样式或者其他自定义逻辑,可以在这里处理:

protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e)
{
    // 判断当前项是编辑项且处于编辑模式
    if (e.Item is GridEditableItem && e.Item.IsInEditMode)
    {
        var editableItem = e.Item as GridEditableItem;
        
        // 给用户名输入框添加占位提示和样式
        TextBox userNameBox = editableItem["UserName"].Controls[0] as TextBox;
        userNameBox.Attributes.Add("placeholder", "请输入用户名");
        userNameBox.CssClass = "form-control";

        // 给邮箱输入框添加悬浮提示
        TextBox emailBox = editableItem["Email"].Controls[0] as TextBox;
        if (!string.IsNullOrEmpty(emailBox.Text))
        {
            emailBox.Attributes.Add("title", "当前邮箱:" + emailBox.Text);
        }
    }
}

4. 数据源绑定(NeedDataSource)

这个事件是RadGrid的核心绑定事件,确保每次分页、编辑后都能正确加载数据:

protected void UserGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    // 这里加载你的数据源,比如从数据库查询
    // 示例:var userList = UserService.GetAllUsers();
    // RadGrid1.DataSource = userList;
}

最后再提几个关键注意点:

  • 务必设置RadGrid的DataKeyNames属性,指定主键字段,否则无法在编辑/删除时准确定位行
  • 内嵌编辑模式下默认用TextBox作为编辑控件,如果需要下拉框、日期选择器等,可改用GridTemplateColumn自定义编辑模板
  • 执行完编辑/删除操作后,记得调用RadGrid1.Rebind()刷新数据

内容的提问来源于stack exchange,提问作者Perry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:07:26