Добавление сортировочных стрелок по умолчанию в GridView - PullRequest
5 голосов
/ 22 января 2012

Я новичок в Asp.net и сейчас работаю с GridViews.Я просмотрел этот сайт, а другие видели советы о том, как добавить стрелки сортировки в заголовки столбцов.

До сих пор я делал это:

Установите эти свойства GridView:

SortedAscendingHeaderStyle-CssClass="sortasc"
SortedDescendingHeaderStyle-CssClass="sortdesc"

И у моего css есть это:

th.sortasc a  
{
   display:block; padding:0 4px 0 15px; 
   background:url("images/icons/ascArrow.png") no-repeat;
}

th.sortdesc a 
{
   display:block; padding:0 4px 0 15px; 
  background:url("images/icons/descArrow.png") no-repeat;
}

Это прекрасно работает для показа изображения после того, как пользователь щелкнет заголовок и отсортирует столбец.

Проблема, с которой я столкнулся сейчас, заключается в том, что я хочу, чтобы в столбцах отображались изображения по умолчанию, чтобы пользователи могли знать, что они могут щелкнуть их для сортировки.Есть ли способ сделать это?

Ответы [ 2 ]

10 голосов
/ 22 января 2012

вы можете показать стрелку для сортировки поведения столбца gridview в событии RowCreated, например, я обычно делаю это так

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        foreach (TableCell tc in e.Row.Cells)
        {
            if (tc.HasControls())
            {
                // search for the header link
                LinkButton lnk = (LinkButton)tc.Controls[0];
                if (lnk != null && GridView1.SortExpression == lnk.CommandArgument)
                {
                    // inizialize a new image
                    System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
                    // setting the dynamically URL of the image
                    img.ImageUrl = "~/img/ico_" + (GridView1.SortDirection == SortDirection.Ascending ? "asc" : "desc") + ".gif";
                    // adding a space and the image to the header link
                    tc.Controls.Add(new LiteralControl(" "));
                    tc.Controls.Add(img);

                }
            }
        }
    }
}

также переключает изображение в порядке возрастания и убывания столбца

Что на самом деле делает код? перебирает заголовок GridView для поиска LinkButton (Framework создает его, только если установлено свойство SortExpression) . Затем, если найденное LinkButton является отсортированным полем, оно показывает изображение на выходе, вот и все

AnswerSource

0 голосов
/ 14 ноября 2018

Я использовал следующий метод ... То же, что принятый ответ, но с использованием символов вместо изображений. Обмен в случае, если это помогает кому-то еще.

protected void GrdOverview_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        foreach (TableCell tc in e.Row.Cells)
        {
            if (tc.HasControls())
            {
                // search for the header link
                LinkButton lnk = (LinkButton)tc.Controls[0];

                string sortDir = ViewState["SortDirection"] != null ? ViewState["SortDirection"].ToString() : "ASC";
                string sortBy = ViewState["SortExpression"] != null ? ViewState["SortExpression"].ToString() : "---";

                if (lnk != null && sortBy == lnk.CommandArgument)
                {
                    string sortArrow = sortDir == "ASC" ? " ▲" : " ▼";
                    lnk.Text += sortArrow;
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...