记录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 >& nbsp;
< 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) ? "插入" : "更新" %> . 因为插入更新用的是同一个窗口~ 所以用这句判断是插入还是更新~