Telerik RadGrid - DataSet (增删查改)
记录Telerik学习过程~
Telerik RadGrid 数据展现、修改、删除、增加, 数据源使用后台DataSet绑定.
RadGrid支持弹出编辑形式。 条件是需要设置EditMode属性弹出。 EditMode="PopUp"

AllowPaging="True" PageSize="10" AllowSorting="True" AutoGenerateColumns="false"
ShowStatusBar="true" AllowAutomaticDeletes="True" AllowAutomaticInserts="True"
AllowAutomaticUpdates="True" HorizontalAlign="NotSet" onupdatecommand="RadGrid1_UpdateCommand"
onneeddatasource="RadGrid1_NeedDataSource" ondeletecommand="RadGrid1_DeleteCommand" oninsertcommand="RadGrid1_InsertCommand">
<MasterTableView CommandItemDisplay="TopAndBottom" DataKeyNames="MenuID" EditMode="PopUp">
<CommandItemSettings ExportToPdfText="Export to Pdf" AddNewRecordText="添加新项"
RefreshText="更新"></CommandItemSettings>
<Columns>
<telerik:GridEditCommandColumn EditText="修改">
</telerik:GridEditCommandColumn>
<telerik:GridBoundColumn UniqueName="MenuID" HeaderText="菜单序号" DataField="MenuID">
<HeaderStyle Width="60px"></HeaderStyle>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn UniqueName="SortNo" HeaderText="排序序号" DataField="SortNo">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn UniqueName="ParentID" HeaderText="父节点" DataField="ParentID">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn UniqueName="Name" HeaderText="名称" DataField="Name">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn UniqueName="IconUrl" HeaderText="图标路径" DataField="IconUrl">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn UniqueName="Url" HeaderText="链接路径" DataField="Url">
</telerik:GridBoundColumn>
<telerik:GridButtonColumn CommandName="Delete" Text="删除" ConfirmText="确定删除吗?" UniqueName="column">
</telerik:GridButtonColumn>
</Columns>
<EditFormSettings InsertCaption="添加新数据" CaptionFormatString="修改 菜单序号: {0}"
CaptionDataField="MenuID" EditFormType="Template"
PopUpSettings-Modal="true">
<EditColumn UniqueName="EditCommandColumn1" EditText="修改"></EditColumn>
<FormTemplate>
<table id="Table1" cellspacing="1" cellpadding="1" width="250" border="0">
<tr>
<td>
排序序号:
</td>
<td>
<asp:TextBox ID="txtSortNo" Text='<%# Bind( "SortNo") %>' runat="server">
</asp:TextBox>
</td>
</tr>
<tr>
<td>
父节点:
</td>
<td>
<asp:TextBox ID="txtParentID" Text='<%# Bind( "ParentID") %>' runat="server">
</asp:TextBox>
</td>
</tr>
<tr>
<td>
名称:
</td>
<td>
<asp:TextBox ID="txtName" Text='<%# Bind( "Name") %>' runat="server">
</asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2">
<hr />
</td>
</tr>
<tr>
<td>
是否启用:
</td>
<td>
<asp:CheckBox ID="ckEnable" runat="server" Checked='<%# (Container is GridEditFormInsertItem) ? false : Eval("IsEnable") %>'/>
</td>
</tr>
<tr>
<td>
图标路径:
</td>
<td>
<asp:TextBox ID="txtIconUrl" runat="server" Text='<%# Bind( "IconUrl" ) %>'>
</asp:TextBox>
</td>
</tr>
<tr>
<td>
链接路径:
</td>
<td>
<asp:TextBox ID="txtUrl" runat="server" Text='<%# Bind( "Url") %>'>
</asp:TextBox>
</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td align="right" colspan="2">
<asp:Button ID="Button1" Text='<%# (Container is GridEditFormInsertItem) ? "插入" : "更新" %>'
runat="server" CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>'>
</asp:Button>
<asp:Button ID="Button2" Text="取消" runat="server" CausesValidation="False" CommandName="Cancel">
</asp:Button>
</td>
</tr>
</table>
</FormTemplate>
</EditFormSettings>
<PagerStyle FirstPageToolTip="首页" LastPageToolTip="尾页" NextPagesToolTip="下一页"
NextPageToolTip="下一页"
PageSizeLabelText="页数:" PrevPagesToolTip="上一页" PrevPageToolTip="上一页" />
</MasterTableView>
</telerik:RadGrid>
ShowStatusBar="true" //显示工具栏
EditFormType="Template" //所有类型的编辑形式弹出可以显示在编辑类型AutoGenerated、WebUserControl和Template
在弹出EditForm设置GridEditFormSettings控制通过的PopUpSettings属性对象。 它暴露3属性:
- 高度 -定义的百分比或弹出高度的像素
- 宽度-定义宽度的百分比或弹出像素
- 滚动条-定义是否应显示滚动条并在编辑表格。此设置优先级较高,因此,如果高度设置,但不显示垂直滚动条的内容需要更多的空间,在弹出会被重新调整,以适应整个内容。默认值为 None。
设置下DataSet , 方便后面调用.

{
get
{
object obj = this.Session["MenuData"];
if (obj != null)
{
return (DataSet)obj;
}
DataSet menuData = new DataSet();
String ConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(ConnString);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand("SELECT * FROM Menu", conn);
adapter.Fill(menuData, "Menu");
this.Session["MenuData"] = menuData;
return menuData;
}
}
绑定RadGird,在NeedDataSource事件里绑定~

{
this.RadGrid1.DataSource = MenuData;
this.MenuData.Tables["Menu"].PrimaryKey = new DataColumn[] { this.MenuData.Tables["Menu"].Columns["MenuID"] };//设置主键
}
UpdateCommand事件里实现修改.

{
GridEditableItem editedItem = e.Item as GridEditableItem;
DataRow[] changedRows = MenuData.Tables["Menu"].Select("MenuID = " + editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["MenuID"]);
if (changedRows.Length != 1)
{
e.Canceled = true;
return;
}
Hashtable newValues = new Hashtable();
newValues["SortNo"] = (editedItem.FindControl("txtSortNo") as TextBox).Text;
newValues["ParentID"] = (editedItem.FindControl("txtParentID") as TextBox).Text;
newValues["Name"] = (editedItem.FindControl("txtName") as TextBox).Text;
newValues["IsEnable"] = (editedItem.FindControl("ckEnable") as CheckBox).Checked;
newValues["IconUrl"] = (editedItem.FindControl("txtIconUrl") as TextBox).Text;
newValues["Url"] = (editedItem.FindControl("txtUrl") as TextBox).Text;
newValues["MenuID"] = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["MenuID"];
changedRows[0].BeginEdit();
try
{
//遍历,把数据存到DataRow
foreach (DictionaryEntry entry in newValues)
{
changedRows[0][(string)entry.Key] = entry.Value;
}
changedRows[0].EndEdit();
this.MenuData.AcceptChanges(); //更新数据源
MSSQL.SqlServerHelper.UpdateMenu(); //更新数据库方法
}
catch (Exception ex)
{
changedRows[0].CancelEdit();
RadGrid1.Controls.Add(new LiteralControl("Unable to update Employees. Reason: " + ex.Message));
e.Canceled = true;
}
RadGrid1.MasterTableView.Items[e.Item.ItemIndex].Edit = false;//关闭当前修改窗口
}
RadGrid1_InsertCommand 增加~

{
GridEditableItem editedItem = e.Item as GridEditableItem;
DataRow newRow = MenuData.Tables["Menu"].NewRow();
Hashtable newValues = new Hashtable();
newValues["SortNo"] = (editedItem.FindControl("txtSortNo") as TextBox).Text;
newValues["ParentID"] = (editedItem.FindControl("txtParentID") as TextBox).Text;
newValues["Name"] = (editedItem.FindControl("txtName") as TextBox).Text;
newValues["IsEnable"] = (editedItem.FindControl("ckEnable") as CheckBox).Checked;
newValues["IconUrl"] = (editedItem.FindControl("txtIconUrl") as TextBox).Text;
newValues["Url"] = (editedItem.FindControl("txtUrl") as TextBox).Text;
//获取表Menu最后一个的ID + 1
newValues["MenuID"] = (int)this.MenuData.Tables["Menu"].Rows[this.MenuData.Tables["Menu"].Rows.Count - 1]["MenuID"] + 1;
try
{
foreach (DictionaryEntry entry in newValues)
newRow[(string)entry.Key] = entry.Value;
this.MenuData.Tables["Menu"].Rows.Add(newRow);
this.MenuData.Tables["Menu"].AcceptChanges();
MSSQL.SqlServerHelper.Insert();
}
catch (Exception ex)
{
e.Canceled = true;
}
}
RadGrid1_DeleteCommand 删除~

DataSet ds = (DataSet)Session["MenuData"];
if (ds.Tables["Menu"].Rows.Find(ID) != null)
{
ds.Tables["Menu"].Rows.Find(ID).Delete();
ds.Tables["Menu"].AcceptChanges();
MSSQL.SqlServerHelper.DeleteMenu(ID);
Session["DataSource"] = ds.Tables["Menu"];
}
前台页面一些效果.

<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="RadGrid1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="RadGrid1" />
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
双击行, 编辑状态:
在RadGrid里加入
<ClientSettings>
<ClientEvents OnRowDblClick="RowDblClick" />
</ClientSettings>
JS加入:
function RowDblClick(sender, eventArgs) {
sender.get_masterTableView().editItem(eventArgs.get_itemIndexHierarchical());
}
细节:
因为是英文的,所以可以找到****Text去改文本,那样提示或文本都是中文的了 - -,
<%# (Container is GridEditFormInsertItem) ? "插入" : "更新" %> . 因为插入更新用的是同一个窗口~ 所以用这句判断是插入还是更新~
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步