积极答复者
gridview设定表头排序后修改A标签内容

问题
答案
-
<%@ Page Language="C#" EnableEventValidation="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> System.Data.DataView CreateDataSourceByXianhuiMeng() { System.Data.DataTable dt = new System.Data.DataTable(); System.Data.DataRow dr; dt.Columns.Add(new System.Data.DataColumn("id", typeof(System.Int32))); dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal))); for (int i = 1; i < 6; i++) { System.Random rd = new System.Random(Environment.TickCount * i); ; dr = dt.NewRow(); dr[0] = i; dr[1] = "孟子E章-" + i.ToString(); dr[2] = System.Math.Round(rd.NextDouble() * 100, 2); dr[3] = System.Math.Round(rd.NextDouble() * 100, 2); dr[4] = System.Math.Round(rd.NextDouble() * 100, 2); dr[5] = System.Math.Round(rd.NextDouble() * 100, 2); dt.Rows.Add(dr); } System.Data.DataView dv = new System.Data.DataView(dt); return dv; } protected void Page_Load(object sender, EventArgs e) { GridView1.DataSource = CreateDataSourceByXianhuiMeng(); GridView1.DataBind(); for (int i = 0; i < GridView1.HeaderRow.Cells.Count; i++) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); System.IO.StringWriter sw = new System.IO.StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(sw); LinkButton l = GridView1.HeaderRow.Cells[i].Controls[0] as LinkButton; l.RenderControl(htw); Response.Write("<li>" + Server.HtmlEncode(sb.ToString())); } } public override void VerifyRenderingInServerForm(Control control) { } protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" ShowHeader="true" AutoGenerateColumns="true" AllowSorting="true" OnSorting="GridView1_Sorting"> </asp:GridView> </form> </body> </html>
【孟子E章】- 已标记为答案 scate233 2009年11月24日 8:49
-
忘记了gridview怎么写了
目前想到重新写字段可以达到
public class bound :System.Web.UI.WebControls.BoundField
{
public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
{
if (this.ShowHeader && this.SortExpression.Length > 0 && cellType == DataControlCellType.Header)
{
base.InitializeCell(cell, cellType, rowState, rowIndex);
if (cell.HasControls())
{
LinkButton link = cell.Controls[0] as LinkButton;
System.Web.UI.WebControls.Panel divs = new Panel();
divs.Controls.Add(link);
cell.Controls.Add(divs);
}
}
else
base.InitializeCell(cell, cellType, rowState, rowIndex);
}}
- 已标记为答案 scate233 2009年11月24日 8:48
全部回复
-
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> System.Data.DataView CreateDataSourceByXianhuiMeng() { System.Data.DataTable dt = new System.Data.DataTable(); System.Data.DataRow dr; dt.Columns.Add(new System.Data.DataColumn("id", typeof(System.Int32))); dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal))); for (int i = 1; i < 6; i++) { System.Random rd = new System.Random(Environment.TickCount * i); ; dr = dt.NewRow(); dr[0] = i; dr[1] = "孟子E章-" + i.ToString(); dr[2] = System.Math.Round(rd.NextDouble() * 100, 2); dr[3] = System.Math.Round(rd.NextDouble() * 100, 2); dr[4] = System.Math.Round(rd.NextDouble() * 100, 2); dr[5] = System.Math.Round(rd.NextDouble() * 100, 2); dt.Rows.Add(dr); } System.Data.DataView dv = new System.Data.DataView(dt); return dv; } protected void Page_Load(object sender, EventArgs e) { GridView1.DataSource = CreateDataSourceByXianhuiMeng(); GridView1.DataBind(); } protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { Response.Write((((sender as GridView).HeaderRow.Controls[5] as DataControlFieldHeaderCell).Controls[0] as LinkButton).Text); } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" ShowHeader="true" AutoGenerateColumns="true" AllowSorting="true" OnSorting="GridView1_Sorting"> </asp:GridView> </form> </body> </html>
【孟子E章】 -
差不多重写个字段
public class bound :System.Web.UI.WebControls.BoundField
{
public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
{
if (this.ShowHeader && this.SortExpression.Length > 0 && cellType == DataControlCellType.Header)
{
base.InitializeCell(cell, cellType, rowState, rowIndex);
if (cell.HasControls())
{
LinkButton link = cell.Controls[0] as LinkButton;
link.Text = "321";
}
}
else
base.InitializeCell(cell, cellType, rowState, rowIndex);
}}
-
GridView1.HeaderRow.Cells[5].Controls[0] as LinkButtonCountrols拿出来的只有表头text??拿出来的不就是控件啊。(GridView1.HeaderRow.Cells[5].Controls[0] as LinkButton).Text = "xxxx";不就是改变文字了吗?完整的例子
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> System.Data.DataView CreateDataSourceByXianhuiMeng() { System.Data.DataTable dt = new System.Data.DataTable(); System.Data.DataRow dr; dt.Columns.Add(new System.Data.DataColumn("id", typeof(System.Int32))); dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal))); for (int i = 1; i < 6; i++) { System.Random rd = new System.Random(Environment.TickCount * i); ; dr = dt.NewRow(); dr[0] = i; dr[1] = "孟子E章-" + i.ToString(); dr[2] = System.Math.Round(rd.NextDouble() * 100, 2); dr[3] = System.Math.Round(rd.NextDouble() * 100, 2); dr[4] = System.Math.Round(rd.NextDouble() * 100, 2); dr[5] = System.Math.Round(rd.NextDouble() * 100, 2); dt.Rows.Add(dr); } System.Data.DataView dv = new System.Data.DataView(dt); return dv; } protected void Page_Load(object sender, EventArgs e) { GridView1.DataSource = CreateDataSourceByXianhuiMeng(); GridView1.DataBind(); } protected void GridView1_PreRender(object sender, EventArgs e) { for (int i = 0; i < GridView1.HeaderRow.Cells.Count; i++) { (GridView1.HeaderRow.Cells[i].Controls[0] as LinkButton).Text = "新的名字" + i.ToString(); } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" ShowHeader="true" AutoGenerateColumns="true" AllowSorting="true" OnPreRender="GridView1_PreRender"> </asp:GridView> </form> </body> </html>
【孟子E章】 -
<%@ Page Language="C#" EnableEventValidation="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> System.Data.DataView CreateDataSourceByXianhuiMeng() { System.Data.DataTable dt = new System.Data.DataTable(); System.Data.DataRow dr; dt.Columns.Add(new System.Data.DataColumn("id", typeof(System.Int32))); dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal))); for (int i = 1; i < 6; i++) { System.Random rd = new System.Random(Environment.TickCount * i); ; dr = dt.NewRow(); dr[0] = i; dr[1] = "孟子E章-" + i.ToString(); dr[2] = System.Math.Round(rd.NextDouble() * 100, 2); dr[3] = System.Math.Round(rd.NextDouble() * 100, 2); dr[4] = System.Math.Round(rd.NextDouble() * 100, 2); dr[5] = System.Math.Round(rd.NextDouble() * 100, 2); dt.Rows.Add(dr); } System.Data.DataView dv = new System.Data.DataView(dt); return dv; } protected void Page_Load(object sender, EventArgs e) { GridView1.DataSource = CreateDataSourceByXianhuiMeng(); GridView1.DataBind(); for (int i = 0; i < GridView1.HeaderRow.Cells.Count; i++) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); System.IO.StringWriter sw = new System.IO.StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(sw); LinkButton l = GridView1.HeaderRow.Cells[i].Controls[0] as LinkButton; l.RenderControl(htw); Response.Write("<li>" + Server.HtmlEncode(sb.ToString())); } } public override void VerifyRenderingInServerForm(Control control) { } protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" ShowHeader="true" AutoGenerateColumns="true" AllowSorting="true" OnSorting="GridView1_Sorting"> </asp:GridView> </form> </body> </html>
【孟子E章】- 已标记为答案 scate233 2009年11月24日 8:49
-
忘记了gridview怎么写了
目前想到重新写字段可以达到
public class bound :System.Web.UI.WebControls.BoundField
{
public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
{
if (this.ShowHeader && this.SortExpression.Length > 0 && cellType == DataControlCellType.Header)
{
base.InitializeCell(cell, cellType, rowState, rowIndex);
if (cell.HasControls())
{
LinkButton link = cell.Controls[0] as LinkButton;
System.Web.UI.WebControls.Panel divs = new Panel();
divs.Controls.Add(link);
cell.Controls.Add(divs);
}
}
else
base.InitializeCell(cell, cellType, rowState, rowIndex);
}}
- 已标记为答案 scate233 2009年11月24日 8:48
-
public class grids:GridView
{
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (this.ChildControlsCreated)
{
if (this.HeaderRow != null && this.AllowSorting)
for (int i = 0; i < this.HeaderRow.Cells.Count; i++)
{
if (this.HeaderRow.Cells[i].HasControls())
{LinkButton link = this.HeaderRow.Cells[i].Controls[0] as LinkButton;
System.Web.UI.WebControls.Panel divs = new Panel();
divs.Controls.Add(link);
this.HeaderRow.Cells[i].Controls.Add(divs);
}
}
}base.Render(writer);
}
}
}- 已建议为答案 mldark 2009年11月24日 10:03
-
就是说在生成的 html 里是要这样的内容:
<th id="GridViewPj4_ctl01_0" class="fixRow" scope="col" style="width:100px;"><div id="GridViewPj4_ctl01_1" class="FreeHead" columnIndex ="1" >
<a href="javascript:__doPostBack('GridViewPj4','Sort$ename')">ename</a>
</div></th>
那个1 我有了,columnIndex 怎么在上面那段代码里一并插进去?现在生成的是
<th id="GridViewPj4_ctl01_0" class="fixRow" scope="col" style="width:100px;"><div id="GridViewPj4_ctl01_1" class="FreeHead" >
<a href="javascript:__doPostBack('GridViewPj4','Sort$ename')">ename</a>
</div></th> -
if (this.HeaderRow.Cells[i].HasControls())
{
this.HeaderRow.Cells[i].Attributes["columnIndex"] = (i + 1).ToString();
LinkButton link = this.HeaderRow.Cells[i].Controls[0] as LinkButton;
System.Web.UI.WebControls.Panel divs = new Panel();
divs.Controls.Add(link);
this.HeaderRow.Cells[i].Controls.Add(divs);
}- 已编辑 mldark 2009年11月24日 10:13 看错了
-
if (this.ChildControlsCreated)
{
if (this.HeaderRow != null && this.AllowSorting)
for (int i = 0; i < this.HeaderRow.Cells.Count; i++)
{
if (this.HeaderRow.Cells[i].HasControls())
{
this.HeaderRow.Cells[i].Attributes["columnIndex"] = (i + 1).ToString();
LinkButton link = this.HeaderRow.Cells[i].Controls[0] as LinkButton;
System.Web.UI.WebControls.Panel divs = new Panel();
divs.Controls.Add(link);
this.HeaderRow.Cells[i].Controls.Add(divs);
}
}
}base.Render(writer);
}