Чтобы получить ссылку на ImageButton
, определенный в вашем HeaderTemplate
, вы можете подключить событие RowDataBound к GridView
. В обработчике событий проверьте, является ли строка строкой заголовка, с помощью свойства RowType
, а затем используйте метод FindControl
, чтобы получить ссылку на элемент управления.
protected void gridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.Header)
{
var imageButton = (ImageButton)e.Row.FindControl("Name_SortImgBtn");
imageButton.ImageUrl = "~/myimage.gif";
}
}
EDIT
Я думаю, вы на правильном пути. Я бы сделал следующие изменения:
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
//Retrieve the table from the session object.
DataTable dt = Session["MainData"] as DataTable;
if (dt == null) return;
//Sort the data
dt.DefaultView.Sort = e.SortExpression + " " +
GetSortDirection(e.SortExpression);
this.GridView1.DataSource = dt;
this.GridView1.DataBind();
}
Нет необходимости беспокоиться о ImageButton
в обработчике Sorting
. Щелчок по LinkButton
в заголовке вызовет обратную запись, и будет вызван обработчик события Sorting
. Он будет запущен до того, как будет вызвано событие RowDataBound
(этого не произойдет, пока не будет вызван метод GridView1.DataBind
). Кроме того, метод GetSortDirection
сохранит выражение сортировки и порядок сортировки в ViewState
. Эти значения понадобятся нам позже в обработчике событий RowDataBound
(показано ниже).
protected void gridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
//Determine sort column and sort order
var column = ViewState["SortExpression"] != null ?
ViewState["SortExpression"].ToString() : string.Empty;
var sortDirection = ViewState["SortDirection"] != null ?
ViewState["SortDirection"].ToString() : string.Empty;
//Find ImageButton based on sort column (return if not found)
var imageButtonID = string.Concat(column, "_SortImgBtn");
var imageButton = e.Row.FindControl(imageButtonID) as ImageButton;
if(imageButton == null) return;
//Determine sort image to display
imageButton.ImageUrl = string.Equals("asc", sortDirection.ToLower()) ?
"~/App_Themes/Sugar2006/Images/arrow_up.gif" :
"~/App_Themes/Sugar2006/Images/arrow_down.gif";
imageButton.Visible = true;
}
}
В этом обработчике событий мы извлечем значения, хранящиеся в ViewState
, чтобы определить, какой ImageButton
сделать Visible
и какой URL-адрес изображения использовать в зависимости от направления сортировки. Я сделал предположение, что вы дали ImageButton
элементам управления ID
имени столбца плюс "_SortImgBtn"
(если вы будете действовать таким образом, вы можете избежать оператора switch для сопоставления столбца с именем элемента управления). Просто убедитесь, что для ImageButton
элементов управления на главной странице Visible
установлено значение false
, и должно появиться изображение сортировки.