为何无法访问自定义列且设为内嵌编辑模式的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
相关产品推荐
相关产品推荐

