2013-07-30 3 views
1

Я хочу изменить имя одного из столбцов gridview во время выполнения. 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 функция выглядит следующим образом:

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

имя столбца действительно меняется к test1 но функция сортировки идет off.what я должен сделать эту волю измените имя coulmn, а также функцию сортировки, и в моей сортировке нет проблем. Когда я пишу вышеприведенный код, опция сортировки для этого столбца отключается. Пожалуйста, помогите! спасибо.

ответ

1

Я предполагаю, что вы пытаетесь использовать AutoGenerateColumns?

Если это так, почему вы не можете изменить имя столбца в источнике данных (используя «AS», если источником данных является SQL)?

В противном случае изменение текста ячейки сокращает функциональность ASP.NET, которая генерирует отсылку javascript для сортировки.

В качестве альтернативы вы могли бы сделать это, если вы не используете AutoGenerateColumns:

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

Я думаю, ваша проблема исходит от постбэка отправленного при заказе сетки. Вы не хотите переустанавливать свою сетку после ее заказа. В вашем Pageload вы должны добавить:

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

Этот способ предотвратить сетки перезагрузиться и информацию, которую вы установите в myGrid_RowDataBound для имени вашей колонки должна оставаться такой же ...

+0

Вы имеете в виду! Страница.IsPostBack? – Fandango68

1

Проблема заключается в том потому что Sorting устанавливает элемент управления LinkButton в имени столбцов GridView и задает имя так, как вы это делаете, отключите этот элемент управления. Итак, вы должны указать имя столбца с кодом:

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

Да, но после сортировки gridview представляет собой привязку данных, поэтому текст заголовка не изменяется – Fandango68

+0

Fernando68 Чтобы предотвратить сброс имен столбцов, строка, которую я предлагаю, должна быть помещена в событие базы данных строки для строки заголовка. –