Ranjith Reddy CSE Ответов: 4

Сортировка в Gridview Asp.net с#


Привет друзьях, это Н Ранжит.

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

У меня есть пять полей, мне нужно отсортировать их по столбцам заголовка.
и я дал разрешить сортировку = TRUE


Это мой код.

 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {      
        DataTable dtSortTable = GridView1.DataSource as DataTable;

        if (dtSortTable != null)
        {
            DataView dvSortedView = new DataView(dtSortTable);

            dvSortedView.Sort = e.SortExpression + "" + getSortDirectionString(e.SortDirection);
        
            GridView1.DataSource = dvSortedView;
            GridView1.DataBind();
        }
    }

private string getSortDirectionString(SortDirection sortDirection)
    {
        string newSortDirection = String.Empty;
        if(sortDirection== SortDirection.Ascending)
        {
            newSortDirection = "ASC";
        }
        else
        {
            newSortDirection = "DESC";
        }
        return newSortDirection;
}



Это мой вышеприведенный код...он не может работать..
Пожалуйста, кто-нибудь может предложить мне и шаги для сортировки.

Спасибо ,

kartheeee

Привет, я пробую тот же код, но datatable всегда показывает null
как решить?

защищенные пустые сортировочные записи(отправитель объекта, GridViewSortEventArgs e)
{
Объект DataTable ст1 = gridview1, на.Источником данных объекта DataTable;
if (dt1 != null)
{
DataView dv = новый DataView(dt1);
if (e. SortDirection == SortDirection.Восходящий)
{
ДВ.Вроде = Е.SortExpression + "" + "убыв";
}
ещё
{
ДВ.Вроде = Е.SortExpression + "" + " АСК";
}
GridView1. DataSource = dv;
Управления gridview1.Привязку();
}

ТКС
kartheeee

4 Ответов

Рейтинг:
2

_Amy

Похоже, вам нужно иметь

var DataSource = from data in GridViewData
                    orderby data.Column1
                    select data;

Поскольку предложение orderby принимает имя свойства. Предложение не анализирует строку, чтобы определить, что нужно заказать, как это делает Dynamic Queryable.

Или, в случае сортировки по нескольким полям, я бы использовал
var DataSource = from data in GridViewData
                    select data;
switch(fieldToSortOn)
{
  case "Column1":
    DataSource = NewDataSource.OrderBy(x => x.Field1);
    break;
  case "Column2":
    DataSource = NewDataSource.OrderBy(x => x.Field2);
    break;

  ...
}
GridView1.DataSource = DataSource; 
GridView1.DataBind();


Вы также можете попробовать использовать Ручка GridView.OnSorting () и динамическое создание выражения сортировки с помощью LINQ[^].


Рейтинг:
2

Shafeequl

Надеюсь, это может вам помочь...Не забудьте отметить как ответ, если это правильный ответ..k...

 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dtbl = new DataTable();
         dtbl = ;//here get the datatable from db
        if (ViewState["Sort Order"] == null)
        {
            dtbl.DefaultView.Sort = e.SortExpression+" DESC";
            GridView1.DataSource = dtbl;
            GridView1.DataBind();
            ViewState["Sort Order"] = "DESC";
        }
        else
        {
            dtbl.DefaultView.Sort = e.SortExpression + "" + " ASC";
            GridView1.DataSource = dtbl;
            GridView1.DataBind();
            ViewState["Sort Order"] = null;
        }
}

Счастливого Коддинга...


Рейтинг:
1

prasad546

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt=getdata();//here getdata() method returns data from database;
        Session["data"] = dt;
    }
}

protected void ComponentGridView_Sorting(object sender, GridViewSortEventArgs e)
{
    DataTable dataTable = Session["data"] as DataTable;

    if (dataTable != null)
    {
        DataView dataView = new DataView(dataTable);
        dataView.Sort = e.SortExpression + " " + ConvertSortDirection(e.SortDirection);

        ComponentGridView.DataSource = dataView;
        ComponentGridView.DataBind();
    }
}

private string ConvertSortDirection(SortDirection sortDirection)
{
    string newSortDirection = String.Empty;

    switch (sortDirection)
    {
        case SortDirection.Ascending:
            newSortDirection = "ASC";
            break;

        case SortDirection.Descending:
            newSortDirection = "DESC";
            break;
    }

    return newSortDirection;
}


Dhirendra Kumar

это работает..Большое спасибо..

Commish13

Я использую код выше, но я думаю, что я поставил неправильное значение в этой строке здесь:
dt=getdata ();/ / здесь метод getdata () возвращает данные из базы данных;
Я положил
Дим ДТ в качестве нового объекта DataTable()
grdEmp.Источник данных = ДТ
Сеанс ("данные") = dt

Всякий раз, когда я запускаю свою программу, я получаю сообщение об ошибке, в котором говорится, что она не может найти столбец(на который я нажимаю заголовок столбца)

Я очень новичок в этом деле, так что не мог бы кто-нибудь дать мне точно знать, что я должен там печатать.