Tag:几乎集Girdview所有技术为一体的超级变形金刚
1.GridView动态创建控件,而且回发不会消失,绑定事件依然有效。
2.分页,动态添加页脚页码控件,且绑定事件
3.在最合适的地方动态注册添加js事件
4.实现删除、编辑、插入、查找、更新"、取消、新建、选择等事件
5.动态创建模板列,含编辑模板列
6.自定义点击表头排序
7.最合适的地方动态添加css样式
cs文件代码
using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Reflection; namespace a.b.c { public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void GridView1_Init(object sender, EventArgs e) { DataTable dt = new DataTable("ttt"); dt.Columns.Add("c1"); dt.Columns.Add("c2", typeof(int)); dt.Columns.Add("c3"); dt.Rows.Add("1", 11, "r1811"); dt.Rows.Add("2", 21, "rkey2"); dt.Rows.Add("3", 1131, "r1113"); dt.Rows.Add("4", 41, "r1181"); dt.Rows.Add("5", 51, "rkey22"); dt.Rows.Add("6", 613, "r11413"); dt.Rows.Add("7", 71, "r1115"); ViewState["dt"] = dt; GridView gv = (GridView)sender; int index = -1; foreach (DataColumn dc in dt.Columns) { BoundField bf = new BoundField(); bf.HeaderText = dc.ColumnName; bf.DataField = dc.ColumnName; bf.SortExpression = dc.ColumnName; gv.Columns.Insert(++index, bf); } TemplateField tf = new TemplateField(); tf.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "编辑", false) { eddhander=new EventHandler(btn_Click) }; tf.EditItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "更新", true); gv.Columns.Add(tf); CommandField cd = new CommandField(); cd.HeaderText = "综合操作"; cd.InsertText = "插入"; cd.DeleteText = "删除"; cd.EditText = "编辑"; cd.SelectText = "查找"; cd.UpdateText = "更新"; cd.CancelText = "取消"; cd.NewText = "新建"; cd.SelectText = "选择"; cd.ButtonType = ButtonType.Button; cd.ShowInsertButton = cd.ShowDeleteButton = cd.ShowEditButton = cd.ShowSelectButton = cd.ShowCancelButton = cd.ShowSelectButton = true; gv.Columns.Add(cd); } void btn_Click(object sender, EventArgs e)//自定义按钮事件 { Response.Write(DateTime.Now.ToString()); } protected void GridView1_Load(object sender, EventArgs e) { GridView gv = (GridView)sender; if (!IsPostBack) { gv.DataBind(); } } protected void GridView1_DataBinding(object sender, EventArgs e) { GridView gv = (GridView)sender; DataTable dt = ViewState["dt"] as DataTable; DataCount = dt.Rows.Count; DataView dv = new DataView(dt); if (ViewState["sortstr"] != null && ViewState["sortstr"].ToString().Length > 0) { dv.Sort = ViewState["sortstr"].ToString(); } gv.DataKeyNames = new[] { "c1" }; gv.DataSource = dv; } protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='teal'"); e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=''"); foreach (DataControlFieldCell fc in e.Row.Cells) { foreach (Control c in fc.Controls) { if (c is Button && (c as Button).CommandName == "Delete") { (c as Button).Attributes.Add("onclick", "if(!confirm('您确定删除该项吗?')) return;"); } } } } else if (e.Row.RowType == DataControlRowType.Footer) { GridView gv = (GridView)sender; DropDownList dp = new DropDownList(); for (int i = 0; i < gv.PageCount; i++) { dp.Items.Add(new ListItem((i + 1).ToString(), i.ToString())); } dp.AutoPostBack = true; dp.SelectedIndexChanged += new EventHandler(dp_SelectedIndexChanged); dp.SelectedValue = gv.PageIndex.ToString(); e.Row.Cells[0].Controls.Add(dp); } //引发GridView1_RowDataBound } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { //下面的代码可以写在GridView1_RowCreated中 //e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='red'"); //e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=''"); foreach (TableCell tc in e.Row.Cells) { if (tc.Text.Contains("key")) { tc.Text = tc.Text.Replace("key", "<font color=red>key</font>"); } } //tc.Attributes.Add("style","color:red"); } } protected void GridView1_DataBound(object sender, EventArgs e) { //在绑定完所有数据后触发 GridView gv = (GridView)sender; int count = gv.Rows.Count; if (count > 0 && count % gv.PageSize > 0) { for (int i = 0; i < gv.PageSize - count % gv.PageSize; i++) { //dt.Rows.Add(dt.NewRow()); GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal); for (int j = 0; j < gv.Rows[0].Cells.Count; j++) { TableCell cell = new TableCell(); cell.Text = "?"; row.Cells.Add(cell); } gv.FooterRow.Controls[0].Controls.Add(row); } } } protected void GridView1_PreRender(object sender, EventArgs e) { GridView gv = (GridView)sender; gv.Attributes.Add("style", "border:solid 2px yellow"); //可以注册js到客户端 //客户端脚本,响应网页的onunload事件 //this.ClientScript.RegisterClientScriptBlock(this.GetType(), //"unload", "<SCRIPT event='onunload' for='window'>alert('页面卸载');</SCRIPT>"); } protected void GridView1_Unload(object sender, EventArgs e) { ViewState.Remove("dt"); } protected void GridView1_Disposed(object sender, EventArgs e) { //XXXXX.Dispose(); } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView gv = (GridView)sender; gv.AllowSorting = false; gv.EditIndex = e.NewEditIndex; gv.DataBind(); } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { DataTable dt = ViewState["dt"] as DataTable; dt.Rows[e.RowIndex]["c1"] = (GridView1.Rows[e.RowIndex].Cells[0].Controls[0] as TextBox).Text; dt.Rows[e.RowIndex]["c2"] = (GridView1.Rows[e.RowIndex].Cells[1].Controls[0] as TextBox).Text; dt.Rows[e.RowIndex]["c3"] = (GridView1.Rows[e.RowIndex].Cells[2].Controls[0] as TextBox).Text; ViewState["dt"] = dt; GridView gv = (GridView)sender; gv.AllowSorting = true; gv.EditIndex = -1; gv.DataBind(); } protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GridView gv = (GridView)sender; gv.AllowSorting = true; gv.EditIndex = -1; gv.DataBind(); } protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e) { //e.KeepInEditMode = false; //在没有绑定DataSourceID的情况下,暂时确定为不会触发 } protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { DataTable dt = ViewState["dt"] as DataTable; dt.Rows[e.RowIndex].Delete(); ViewState["dt"] = dt; GridView gv = (GridView)sender; gv.DataBind(); } protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e) { //在没有绑定DataSourceID的情况下,暂时确定为不会触发 } protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) { GridView gv = (GridView)sender; gv.SelectedIndex = e.NewSelectedIndex; } protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { GridView gv = (GridView)sender; gv.PageIndex = e.NewPageIndex; } protected void GridView1_PageIndexChanged(object sender, EventArgs e) { //分页事件,绑定数据 GridView gv = (GridView)sender; gv.DataBind(); } protected void dp_SelectedIndexChanged(object sender, EventArgs e) { DropDownList dp = (DropDownList)sender; GridView1.PageIndex = int.Parse(dp.SelectedValue); //GridView1.EditIndex = -1; GridView1.DataBind(); } protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { GridView gv = (GridView)sender; foreach (GridViewRow r in gv.Rows) { r.Font.Size = r.RowIndex == gv.SelectedIndex ? new FontUnit(16) : new FontUnit(12); } } protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { GridView gv = (GridView)sender;//或者 GridView gv = (GridView)e.CommandSource; } protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { //Type t = sender.GetType(); //BindingFlags flag = BindingFlags.NonPublic | BindingFlags.Instance; //t.GetProperty("SortExpressionInternal", flag).SetValue(sender, e.SortExpression, null); //t.GetProperty("SortDirectionInternal", flag).SetValue(sender, e.SortDirection, null); SortOrder = SortOrder == "asc" ? "desc" : "asc"; SortColumn = e.SortExpression; ViewState["sortstr"] = SortColumn + " " + SortOrder; GridView gv = (GridView)sender; gv.DataBind(); } protected void GridView1_Sorted(object sender, EventArgs e) { GridView gv = (GridView)sender; for (int i = 0; i < gv.Columns.Count; i++) { if (gv.Columns[i].SortExpression == SortColumn) { gv.HeaderRow.Cells[i].Controls.Add(new Literal() { Text = SortOrder == "asc" ? "↑" : "↓" }); } } } int DataCount { get { var obj = ViewState["DataCount"]; if (obj != null) { return (int)obj; } return 0; } set { ViewState["DataCount"] = value; } } string SortOrder { get { var obj = ViewState["SortOrder"]; if (obj != null) { return (string)obj; } return "asc"; } set { ViewState["SortOrder"] = value; } } string SortColumn { get { var obj = ViewState["SortColumn"]; if (obj != null) { return (string)obj; } return string.Empty; } set { ViewState["SortColumn"] = value; } } protected void Button1_Click(object sender, EventArgs e) { } protected void LinkButton1_Click(object sender, EventArgs e) { Response.Write(DateTime.Now.ToString()); } } public class GridViewTemplate : ITemplate { private DataControlRowType templateType; private string columnName; bool IsEditTemplate; public EventHandler eddhander; public GridViewTemplate(DataControlRowType type, string colname, bool _IsEditTemplate) { templateType = type; columnName = colname; IsEditTemplate = _IsEditTemplate; } public void InstantiateIn(System.Web.UI.Control container) { switch (templateType) { case DataControlRowType.Header: Literal lc = new Literal(); lc.Text = columnName; container.Controls.Add(lc); break; case DataControlRowType.DataRow: if (IsEditTemplate) { Button btn1 = new Button(); btn1.CausesValidation = true; btn1.CommandName = "Update"; btn1.Text = "更新"; Button btn2 = new Button(); btn2.CausesValidation = false; btn2.CommandName = "Cancel"; btn2.Text = "取消"; container.Controls.Add(btn1); container.Controls.Add(btn2); } else { Button btn3 = new Button(); btn3.CausesValidation = false; btn3.CommandName = "Edit"; btn3.Text = "编辑"; Button mmm = new Button(); mmm.Click += eddhander;//添加事件 mmm.Text = "我自定义的按钮,可输出时间"; container.Controls.Add(mmm); container.Controls.Add(btn3); } break; default: break; } } } }