我有一个gridview我使用Gridview绑定了一个DataTable它的动态因此没有硬编码文本。
我尝试在Databound之后和gridview的PreRender中更改它但没有成功。
实际上文字中有下划线('_'),我想用空格替换它。
以下是代码
<asp:GridView ID="grdSearchResult" runat="server" AutoGenerateColumns="True" Width="99%" OnPreRender="grdSearchResult_PreRender"
OnRowCreated="grdSearchResult_OnRowCreated" OnPageIndexChanging="grdSearchResult_PageIndexChanging">
<HeaderStyle ForeColor="White" BackColor="#215B8D" />
<AlternatingRowStyle BackColor="#F7F7F7" />
<RowStyle CssClass="gridtext" HorizontalAlign="Center" />
</asp:GridView>
protected void grdSearchResult_PreRender(object sender, EventArgs e)
{
for (int i = 0; i < grdSearchResult.Columns.Count; i++)
{
grdSearchResult.Columns[i].HeaderText = grdSearchResult.Columns[i].HeaderText.Replace("_", "");
}
}
答案 0 :(得分:13)
可以使用RowDataBound
GridView
事件执行此操作
protected void grdSearchResult_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
for (int i = 0; i < e.Row.Cells.Count; i++)
{
e.Row.Cells[i].Text = e.Row.Cells[i].Text.Replace("_", " ");
}
}
}
它工作正常。
答案 1 :(得分:9)
您可以更改单元格的文本而不是HeaderText属性:
for (int i = 0; i < grdSearchResult.Columns.Count; i++)
{
grdSearchResult.HeaderRow.Cells[i].Text = grdSearchResult.HeaderRow.Cells[i].Text.Replace("_", "");
}
在绑定数据之后,您无需在PreRender中执行此操作。
答案 2 :(得分:2)
将gridview的AutoGenerateColumns属性设置为false并添加BoundFields。
<asp:GridView ID="grdEmployee" runat="server" AutoGenerateColumns="false">
<columns>
<asp:BoundField HeaderText="ID" DataField="empNo" />
<asp:BoundField HeaderText="First Name" DataField="fName" />
<asp:BoundField HeaderText="Last Name" DataField="lName" />
</columns>
</asp:GridView>
答案 3 :(得分:0)
但是在RowDataBound事件中,原始的e.Row.Cell [i] .Text不可用于更改。
EG。在下面的代码中,“标题行”始终为空。
protected void grdSearchResult_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
for (int i = 0; i < e.Row.Cells.Count; i++)
{
string headerRow = e.Row.Cells[i].Text;
e.Row.Cells[i].Text = headerRow.Replace("_", " ");
}
}
}
答案 4 :(得分:0)
如果标题比其他示例(例如排序按钮)更复杂,请使用:
protected void gvMain_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow oRow = e.Row;
if (oRow.RowType == DataControlRowType.Header)
{
foreach (TableCell oCell in oRow.Cells)
{
foreach (var oCtl in oCell.Controls) {
if(oCtl.GetType() == typeof(System.Web.UI.WebControls.Label))
{
Label oLBL = (Label)oCtl;
oLBL.Text = oLBL.Text.Replace("_", "");
}
}
}
}
}