2010-09-21 37 views
8

Tôi có một GridView tôi bị ràng buộc một DataTable với GridView năng động của nó nên không có văn bản cứng trong desin.Làm thế nào để thay đổi Tiêu đề của GridView sau khi Databound?

Tôi đã cố gắng thay đổi nó sau khi Databound và trong PreRender của GridView nhưng không thành công.

Thực ra có dấu gạch dưới ('_') trong văn bản và tôi muốn thay thế bằng dấu cách.

Dưới đây là mã

<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("_", ""); 
    } 
} 

Trả lời

13

có thể làm điều này với RowDataBound trường hợp 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("_", " "); 
     } 
    } 
} 

và nó hoạt động tốt.

+3

Điều đó sẽ hoạt động, nó sẽ chỉ được thực hiện mỗi khi một hàng bị ràng buộc. – Brissles

9

Bạn có thể thay đổi nội dung của các tế bào chứ không phải là tài sản HeaderText:

 for (int i = 0; i < grdSearchResult.Columns.Count; i++) 
     { 
      grdSearchResult.HeaderRow.Cells[i].Text = grdSearchResult.HeaderRow.Cells[i].Text.Replace("_", ""); 
     } 

Bạn không cần phải làm điều này trong PreRender, chỉ sau khi dữ liệu đã bị ràng buộc.

+0

kiểm tra xem ... nó không hoạt động. – Azhar

+0

Có, tôi đã thử. – Brissles

+0

Hãy làm việc này bằng cách sử dụng 'grdSearchResult.HeaderRow.Cells.Count' thay vì' grdSearchResult.Columns.Count' – emragins

0

Nhưng trong sự kiện OnRowDataBound gốc e.Row.Cell [i] .Text không có sẵn để thay đổi.

Ví dụ: trong mã bên dưới "headerRow" luôn trống.

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("_", " "); 
     } 
    } 
} 
+0

Đây phải là nhận xét chứ không phải là câu trả lời. – kenrogers

+0

Vâng, tôi đang gặp sự cố này ... Thuộc tính 'HeaderRow' là rỗng khi tôi cố gắng sử dụng nó trong sự kiện' Page_Load'. Tìm kiếm ở đây để xem khi nào, ở đâu và cách tôi nên truy cập tiêu đề. – Zarepheth

2

Đặt thuộc tính AutoGenerateColumns của gridview thành false và thêm 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> 
Các vấn đề liên quan