2013-07-30 3 views
1

Gridview의 열 중 하나의 이름을 런타임에 변경하고자합니다. Gridview에서도 정렬이 활성화되어 있습니다.gridview 정렬을 사용할 때 런타임에 Gridview의 열 이름을 변경하십시오.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" OnRowCreated="myGrid_Rowcreate" 
ShowFooter="false" 
AllowSorting="true" 
OnSorting="GridView1_Sorting" 
EnableViewState="false" 
ShowHeaderWhenEmpty="True" 
AllowPaging="false"> 

<AlternatingRowStyle CssClass="altrowstyle" /> 
<HeaderStyle CssClass="headerstyle" /> 
<RowStyle CssClass="rowstyle" /> 
<RowStyle Wrap="false" /> 
<HeaderStyle Wrap="false" /> 
</asp:GridView> 

및처럼 내 onRowCreate 기능은 같습니다 :

있는 gridview 모습처럼 열 이름은 TEST1으로 변경 않지만 정렬 기능을 둬요 내가 그 뜻을한다 간다

protected void myGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     GridViewRow gvr = e.Row; 
     if (gvr.RowType == DataControlRowType.Header) 
     { 
      gvr.Cells[1].Text = "test1"; 
     } 
    } 

coulmn 이름을 변경하고 정렬 기능도 유지합니까? 내 정렬에는 문제가 없습니다. 위의 코드를 작성할 때만 해당 열의 정렬 옵션이 해제됩니다. 도와주세요! 감사합니다.

답변

1

AutoGenerateColumns를 사용하려고합니다.

이 경우 데이터 소스의 열 이름을 변경할 수 없습니다 (데이터 소스가 SQL 인 경우 "AS"사용).

그렇지 않으면 셀 텍스트를 변경하면 정렬 자바 스크립트 다시 게시를 생성하는 ASP.NET 기능이 단락됩니다. 당신이 AutoGenerateColumns를 사용하지 않는 경우

또는 당신이 할 것 :

myGrid.Columns[1].HeaderText = "test1"; 
1

나는 당신의 문제는 당신이 당신의 그리드를 주문할 때 전송 포스트 백에서 유래 생각합니다. 주문한 후에는 그리드를 다시 바인딩하고 싶지 않습니다. 당신의 pageLoad에서 당신은 추가해야합니다 :

If(!PostBack) 
    // the code to bind data to your grid 

당신은 그리드가 다시로드 방지이 방법은 당신이 당신의 열이 동일하게 유지해야 이름을 myGrid_RowDataBound에서 설정 한 정보를 ...

+0

의미는 무엇입니까? Page.IsPostBack? – Fandango68

1

을 문제입니다 Sorting은 GridView 열 이름에 LinkButton 컨트롤을 설정하고 그렇게하는 방식으로 이름을 설정하기 때문에 해당 컨트롤을 비활성화합니다. 따라서 다음과 같은 코드를 사용하여 열의 이름을 설정해야합니다.

((LinkButton)e.Row.Cells[1].Controls[0]).Text = "Test1"; 
+0

그래,하지만 정렬 후 gridview databound 및 머리글 텍스트가 변경되지 않습니다 – Fandango68

+0

Fernando68 열 이름 재설정을 방지하려면 내가 제안하는 줄 헤더 행에 대한 행 databound 이벤트에 배치해야합니다. –