Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сбрасывание сортировки при переходе на др. страниц, Косяк в GridView asp2.0 
V
    Опции темы
Сарт
Дата 9.5.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Темы уже посмотрел не нашел=)
Итак, собсна в чем трабла
Делаю сортировку , все вроде просто зашибись, сортирует. При переход на другую страницу GridView- сортировка сбрасывается. В чем косяк додуматься не могу, В  инете ка кни странно нчиего не нашел=)
Код

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Data.SqlClient;
using System.Web.Configuration;




public partial class UserGridDrop : System.Web.UI.UserControl
{
    private string path = @"C:\xmlConfig.xml";//Путь для файла конфигурации по умолчанию
    XmlDocument doc = new XmlDocument();
    SqlCommand cmd = new SqlCommand();
    SqlDataAdapter da;
    DataTable dt;
    private string s;
    public string TakeS
    {
        get
        {
            return s;
        }
        set
        {
            s = value;
        }
    }
   
    public string TakePath
    {
        get
        {
            return path;
        }

    }

  
    #region Реализация поиска в xml
    protected string SearchInXml(string tagname)
    {
        XmlNodeList nodelist = doc.GetElementsByTagName(tagname);
       
        foreach (XmlNode node in nodelist)
        {
          
           TakeS = node.ChildNodes[0].Value;
        }
        return TakeS;
    }
    #endregion
    #region Реализация работы с локальной БД
    public void WorkWithLocal()
    {

        FillDrop();
        FillGrid();
             
    }
    #endregion
    #region Реализация работы с БД через Web service
    public void WorkWithService()
    {
                
    }
    #endregion
    #region Конфигурирование GridView на основе configXml
    protected void ConfigGrid()
    {
        gridEmpSalary.AllowPaging = true;//Разрешаем разбиение на страницы
        gridEmpSalary.AllowSorting = true;//Разрешаем сортировку
        #region Считывание и обработка значения Salary_Editable
        SearchInXml("Salary_Editable");
        if (TakeS == "true")
        {

        }
        else
        {
            if (TakeS == "false")
            {

            }
            else
                Response.Write("Error in Salary_Column settings!!");
        }
        #endregion

        #region Считывание и обработка значения Rows_Per_Page
        SearchInXml("Rows_Per_Page");
        if (Convert.ToInt32(TakeS) <= 0)
        {
            Response.Write("Error number of rows per page");
        }
        else
        {

            gridEmpSalary.PageSize = Convert.ToInt32(TakeS);//устанавливаем количество строк на страницу
        }
        #endregion
    }
    #endregion
    #region Заполнение DropDown из базы данных
    protected void FillDrop()
    {
        da = new SqlDataAdapter(cmd);
        DataSet  dk = new DataSet();
        SqlConnection cn = new SqlConnection();
        cn.ConnectionString = "SERVER='ADMIN\\sq';DATABASE='ScanTest';UID='sa';PWD='1'";
        cmd.Connection = cn;
        cmd.CommandText = "SELECT Job_nm FROM Jobs";
        try
        {
            cn.Open();
            da.Fill(dk);
            cn.Close();
            foreach (DataRow r in dk.Tables[0].Rows)
            {
                DropJobs.Items.Add(r["Job_nm"].ToString());
            }
        }
        catch (Exception e)
        {
            Response.Write(e.Message);
        }
    }
    #endregion
    #region Заполнение GridView из базы данных
     public DataTable FillGrid()
    {
        string connectionString = "SERVER='ADMIN\\sq';DATABASE='ScanTest';UID='sa';PWD='1'";
        string sql = "SELECT First_name+' '+Last_name As FullName, Salary From Employees";
        SqlConnection con = new SqlConnection(connectionString);
        cmd = new SqlCommand(sql, con);
        da = new SqlDataAdapter(cmd);
        dt = new DataTable();
        try
        {
            con.Open();
            da.Fill(dt);
            gridEmpSalary.DataSource = dt;
            ConfigGrid();
            gridEmpSalary.DataBind();
            
        }
        finally
        {
            con.Close();
        }
        return dt;
    }
    #endregion
    protected void XmlLoadFile()
    {
        /*загружаем созданный\перезаписанный файл с настройками. 
        Считываем значения, конфигурируем user web control
        в соответствии с ним*/
       
        try
        {
            doc.Load(TakePath);
           
        }
        catch(Exception e)
        {
            Response.Write(e.Message.ToString());
        }
        #region Считывание и обработка значения DataSource
        SearchInXml("DataSource");
        if (TakeS == "local")
        {
            
            WorkWithLocal();
        }
        else
        {
            if (TakeS == "web")
            {
                SearchInXml("Web_Service_Url");
                
                //Работа с Web_Service
            }
            else
                Response.Write("Error");
        }
        #endregion
     

    }
    protected void Page_Load(object sender, EventArgs e)
    {

    
        XmlLoadFile();


    }
    

    #region Событие при смене страниц
    protected void gridEmpSalary_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
       
        gridEmpSalary.PageIndex = e.NewPageIndex;
        gridEmpSalary.DataBind();
    }
    #endregion
     
    //Сортировка

    protected void gridEmpSalary_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataView view = dt.DefaultView;
        view.Sort = e.SortExpression;
        gridEmpSalary.DataSource = view;
        gridEmpSalary.DataBind();
        
    }
    
}



Это код UserControla, если вдруг это важно.
Вот обработчики отдельно перехода страниц
Код

 protected void gridEmpSalary_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
       
        gridEmpSalary.PageIndex = e.NewPageIndex;
        gridEmpSalary.DataBind();
    }


И сортировки
Код

 protected void gridEmpSalary_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataView view = dt.DefaultView;
        view.Sort = e.SortExpression;
        gridEmpSalary.DataSource = view;
        gridEmpSalary.DataBind();
        
    }


Вопрос на + к репутации=)=)
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
Mymik
Дата 9.5.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Сарт, после каждой смены страницы ты должен по новой вызывать метод сортировки. Он сбрасывается и это не баг  smile это фича  smile 


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
tol05
Дата 9.5.2007, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Mymik, а если поставить 
Код

<asp:GridView AllowSorting="True" OnSorting="gridEmpSalary_Sorting" />


тогда 
Цитата(Mymik @  9.5.2007,  18:30 Найти цитируемый пост)
по новой вызывать метод сортировки
 будет не нужно?
По идее привязка будет осуществляться автоматом, при сборке страницы?


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Mymik
Дата 9.5.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



tol05, AllowSorting позволяет сортировать данные. Т.е. HeaderText становится кликабельными. А OnSorting это метод вызываемый до сортировки(кажись).
Вообще я за то, чтобы делать сортировка в СУБД. Но тут у человека xml... 


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Сарт
Дата 10.5.2007, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



еслия поставлю сортировку в смену страниц, то что будет просиходить, если грид еще не сортировался?(забио несортированными данными и перешел на другую страницу)??
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
Mymik
Дата 10.5.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Сарт, AFAIK если SortExpression равна пустой строке, то DataView не сортируется. Либо поставь условие проверки на наличие SortExpression.

Цитата(Сарт @  10.5.2007,  02:15 Найти цитируемый пост)
(забио несортированными данными и перешел на другую страницу)??

угу


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Сарт
Дата 10.5.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Плюсика пока не заслужил=)
Сдела так
Код

 private string sort;
    public string sortExp
    {
        get
        {
            return sort;
        }
        set
        {
            sort = value;
        }
    }
  protected void gridEmpSalary_Sorting(object sender, GridViewSortEventArgs e)
    {
        sortExp = e.SortExpression;
        Sort();
    }
    protected void Sort()
    {
        DataView view = dt.DefaultView;
        view.Sort = sortExp;
        gridEmpSalary.DataSource = view;
        gridEmpSalary.DataBind();
    }
protected void gridEmpSalary_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {

        Sort();
        gridEmpSalary.PageIndex = e.NewPageIndex;
        gridEmpSalary.DataBind();
    }


Похоже, это происходит из-за того, что при переходе на др. страницу грида все обнуляется=)
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
Mymik
Дата 10.5.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Сарт, когда ты второй раз приходишь на страницу, ну после того как ты сделал сортировку. То твоя переменная sortExp равна null (проверь). Потому это значение лучше хранить в Cache
Код

Cache.Add("exspression", e.SortExpression, null, DateTime.MaxValue, TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Low, null);


Ну и вызывать соответственно 
Код

Cache["exspression"].ToString();


Цитата(Сарт @  10.5.2007,  18:38 Найти цитируемый пост)
Плюсика пока не заслужил=)

 smile мы тут не из-за них сидим. Это всего лишь благодарность человека.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Сарт
Дата 10.5.2007, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Не получилось опять=(

Сделал так
Код

private string sort;
    public string sortExp
    {
        get
        {
            return sort;
        }
        set
        {
            sort = value;
        }
    }
  protected void gridEmpSalary_Sorting(object sender, GridViewSortEventArgs e)
    {
        Cache.Add("exspression", e.SortExpression, null, DateTime.MaxValue, TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Low, null);

        Sort();
    }
    protected void Sort()
    {
        DataView view = dt.DefaultView;
        view.Sort = Cache["exspression"].ToString();
        gridEmpSalary.DataSource = view;
        gridEmpSalary.DataBind();
    }
protected void gridEmpSalary_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {

        Sort();
        gridEmpSalary.PageIndex = e.NewPageIndex;
        gridEmpSalary.DataBind();
    }

--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
Mymik
Дата 10.5.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Сарт, что конкретно у тебя не работает ??? И желательно попробовать сказать почему оно не работает. А если попробуешь сказать почему не работает, то возможно и ответ найдешь сам.
-- Данные в Cache не сохраняются ???
-- Не правильно сортировка происходит ???
-- ошибочные данные на странице ???


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Сарт
Дата 11.5.2007, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Да все тоже. Сортироет до момента перехода на другую страницу грида:(
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
dazy
Дата 11.5.2007, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 4
Всего: 8



Цитата(Mymik @  10.5.2007,  23:33 Найти цитируемый пост)
 Потому это значение лучше хранить в Cache

А почему именно в Cache, а не session, или во viewstate?
PM MAIL   Вверх
tol05
Дата 11.5.2007, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Потому что viewstate - это гонять данные от клиента к серверу и обратно. Любителей челночных передач уже маловато осталось smile
Ну а не в session - на любителя.

З.Ы. сорри за вмешательство. smile


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Mymik
Дата 11.5.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(tol05 @  11.5.2007,  09:57 Найти цитируемый пост)
З.Ы. сорри за вмешательство. smile 

ты не вмешивайся -- ты подключайся  :о). Это будет лучше.
У тебя тоже классные идеи реализации, может быть я что-то проглядел  smile 


Сарт, поставь на сортировки break point и посмотри какое значение получаешь из Cache ???


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
tol05
Дата 11.5.2007, 14:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Или я чего-то не догоняю, или Сарт, сортирует и вынимает expression из кеша на исходной странице (PageIndexChanging происходит до смены индекса)
а нужно - после. На новом индексе уже, измененном.
Сейчас я вижу вот что: 
- на первой странице отсортировали и expression  засунули в кэш
- нажали смену индекса и отсортировали еще раз smile
- перешли на новую страницу
Надо:
- на первой странице отсортировали и expression  засунули в кэш
- нажали смену индекса
- перешли на новую страницу
- на новой странице в Page_Load (или где там биндится грид? после этого сразу) вытащить expression из кэша и отсортировать вызовом нашего многострадального метода.



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.1080 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.