如何解决ASP.NET:什么时候以及如何在后面的代码中动态更改Gridview的headerText?
| 我有2列的gridview。我想在后面学习编码,并且不想在aspx文件中执行此操作。 如何动态设置列标题文本?我在什么时候这样做?适配器将数据填充到gridview之后? 现在,我有了标题文本,但它与数据字段名称last_name完全相同,我想改为在标题字段中查看姓氏。 我试过了GridView1.Columns[0].HeaderText = \"Last Name\";
但是无论我在哪里尝试,编译器都会抱怨索引超出范围。
谢谢。
gridview的aspx代码:
<asp:GridView ID=\"GridView1\" runat=\"server\" AllowPaging=\"True\" AllowSorting=\"True\"
BackColor=\"White\" BorderColor=\"#DEDFDE\" BorderStyle=\"None\" BorderWidth=\"1px\"
Width=\"728px\" CellPadding=\"4\" ForeColor=\"Black\" GridLines=\"Vertical\" OnPageIndexChanging=\"GridView1_PageIndexChanging\"
OnSorting=\"GridView1_Sorting\" PageSize=\"14\" OnRowDataBound=\"GridView1_RowDataBound\">
<AlternatingRowStyle BackColor=\"White\" />
<FooterStyle BackColor=\"#CCCC99\" />
<HeaderStyle BackColor=\"#6B696B\" Font-Bold=\"True\" ForeColor=\"White\" />
<PagerStyle BackColor=\"#F7F7DE\" ForeColor=\"Black\" HorizontalAlign=\"Right\" />
<RowStyle BackColor=\"#F7F7DE\" />
<SelectedRowStyle BackColor=\"#CE5D5A\" Font-Bold=\"True\" ForeColor=\"White\" />
<SortedAscendingCellStyle BackColor=\"#FBFBF2\" />
<SortedAscendingHeaderStyle BackColor=\"#848384\" />
<SortedDescendingCellStyle BackColor=\"#EAEAD3\" />
<SortedDescendingHeaderStyle BackColor=\"#575357\" />
<PagerSettings Mode=\"NumericFirstLast\" FirstPageText=\"First\" LastPageText=\"Last\"
PageButtonCount=\"5\" Position=\"Bottom\" />
</asp:GridView>
解决方法
尝试将其放在GridView1.RowDataBound处理程序中。
评估e.Row.RowType以确定它是否是标题行,然后替换HeaderText。
protected void GridView1_RowDataBound(object sender,System.Web.UI.WebControls.GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header) {
GridView1.Columns[0].HeaderText = \"Last Name\";
}
}
但是,如果要动态创建列并使用排序,则需要以这种方式进行处理,以防止将链接偶然转换为纯文本:
protected void GridView1_RowDataBound(object sender,System.Web.UI.WebControls.GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header) {
LinkButton HLink = (LinkButton)e.Row.Cells[0].Controls[0];
HLink.Text = \"Last Name\";
}
}
使用任一方法,将此属性添加到ASPX中的Gridview中:
OnRowDataBound=\"GridView1_RowDataBound\"
, 添加到Page_Load,但是
GridView1.Columns[0].HeaderText = \"Last Name\";
将无法工作,因为它会抱怨列数为0,因此请执行以下操作:
protected void grdProd_Load(object sender,EventArgs e)
{
grdProd.HeaderRow.Cells[0].Text = \"Item\";
grdProd.HeaderRow.Cells[1].Text = \"Category\";
}
, 我认为您不希望在网格中的每行数据绑定事件(每行1次)中为标题绑定文本!
只需挂接到页面的Loaded事件,然后将文本绑定到那里就可以了。
protected void Page_Load(object sender,EventArgs e)
{
GridView1.Columns[0].HeaderText = \"Last Name\";
}
, <%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeFile=\"grdvw8.aspx.cs\" Inherits=\"grdvw8\" %>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head id=\"Head1\" runat=\"server\">
<title></title>
</head>
<body>
<form id=\"form1\" runat=\"server\">
<div>
first header name change To<asp:TextBox ID=\"txt1\" runat=\"server\"></asp:TextBox>
<br />
Second header name change To<asp:TextBox ID=\"txt2\" runat=\"server\"></asp:TextBox>
<br />
<asp:Button ID=\"btnChange\" Text=\"Change Header Text\" runat=\"server\" onclick=\"btnChange_Click\" />
<asp:GridView ID=\"grdvw\" runat=\"server\">
<HeaderStyle Font-Bold=\"true\" ForeColor=\"Brown\" />
</asp:GridView>
</div>
</form>
</body>
</html>
/ASPX.CS PAGE/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
public partial class grdvw8 : System.Web.UI.Page
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[\"code\"].ConnectionString);
protected void Page_Load(object sender,EventArgs e)
{
Bind();
}
protected void Bind()
{
con.Open();
SqlCommand cmd=new SqlCommand(\"select * from gridview\",con);
SqlDataAdapter da=new SqlDataAdapter(cmd);
DataSet ds=new DataSet();
da.Fill(ds);
grdvw.DataSource = ds;
grdvw.DataBind();
}
protected void btnChange_Click(object sender,EventArgs e)
{
if (grdvw.Rows.Count > 0)
{
grdvw.HeaderRow.Cells[0].Text = txt1.Text;
grdvw.HeaderRow.Cells[1].Text = txt2.Text;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。