ASP.NET GridView с LinqDataSource: запоминать состояние сортировки, подкачки и где параметры - PullRequest
0 голосов
/ 07 октября 2009

Я использую стандартный GridView с LinqDataSource. Пользователь может сортировать и листать сетку, используя стандартные стандартные материалы. Критерии поиска (WhereParameters) также могут быть использованы для фильтрации результатов. Это прекрасно работает, но состояние, очевидно, теряется при переходе от страницы.

Так что общий механизм захвата состояния Sort и Pagining, а также значения WhereParameter были бы хороши. Затем можно будет добавить эти значения в сеанс и восстанавливать их всякий раз, когда пользователь возвращается на страницу.

Любая помощь будет высоко ценится.

Мой код выглядит следующим образом:

<asp:GridView ID="dataGridView" runat="server" 
        AllowPaging="True" 
        AllowSorting="True" 
        AutoGenerateColumns="False" 
        CssClass="GridView"
        DataSourceID="linqDataSource"
        PageSize="20">
    <Columns>
        <asp:BoundField 
            HeaderText="Name" 
            DataField="Name" 
            SortExpression="Name" />
        <asp:TemplateField 
            HeaderText="Province" 
            SortExpression="Province.Name">
            <ItemTemplate>
                <%# Eval("Province.Name")%></ItemTemplate>
            </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:LinqDataSource ID="linqDataSource" runat="server" 
    ContextTypeName="DataContext" 
    TableName="Schools"
    EnableUpdate="True" 
    EnableDelete="True"
    Where="Name.Contains(@Name) && (ProvinceID == @ProvinceID)">
    <WhereParameters>
        <asp:ControlParameter 
            Name="Name" 
            DefaultValue="" 
            ControlID="tbName" 
            Type="String" 
            ConvertEmptyStringToNull="False" />
        <asp:ControlParameter 
            Name="ProvinceID" 
            DefaultValue="" 
            ControlID="ddlProvince" 
            Type="Int32" />
    </WhereParameters>
</asp:LinqDataSource>

Ответы [ 2 ]

0 голосов
/ 09 января 2010

Andy

Рассматривали ли вы возможность подключения к событию OnDataBound gridviews и сохранения соответствующих атрибутов gridview в файле cookie? Затем вы можете нажать на этот файл cookie на событии PageLoad, отличном от PostBack, чтобы восстановить вид сетки примерно * там, где его оставил пользователь.

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

Вы можете использовать свойство истечения срока действия cookie, если хотите, чтобы страница долгое время запоминала свое состояние.

в любом случае ... Вот пример кода.

protected void gvCountryList_DataBound(object sender, EventArgs e)
{
  // Store gvCountryList Gridview Sort, PageIndex, and PageSize info 
  //   in a cookie so that we can redisplay same grid position next 
  //   time they visit page. 
  HttpCookie aCookie = new HttpCookie("MaintainCountries");
  aCookie["SortExp"] = gvCountryList.SortExpression.ToString();
  aCookie["SortDir"] = gvCountryList.SortDirection.ToString();
  aCookie["PageIndex"] = gvCountryList.PageIndex.ToString();
  Response.Cookies.Add("aCookie");
)

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack == false)
    {

        //Grab the cookies
        if (Request.Cookies["MaintainCountries"] != null)
        {
            if ((Request.Cookies["MaintainCountries"]["SortExp"] != null)
             && (Request.Cookies["MaintainCountries"]["SortDir"] != null)
             && (Request.Cookies["MaintainCountries"]["PageIndex"] != null))
            {
                SortDirection srtDir = SortDirection.Ascending;
                if (Request.Cookies["MaintainCountries"]["SortDir"].ToUpper() == "DESCENDING")
                    srtDir = SortDirection.Descending;
                gvCountryList.Sort(Request.Cookies["MaintainCountries"]["SortExp"].ToString(), srtDir);
                gvCountryList.PageIndex = Convert.ToInt32(Request.Cookies["MaintainCountries"]["PageIndex"].ToString());
            }
        }
    }
}

Может быть, есть лучший способ, чем печенье.

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

Mike

0 голосов
/ 07 октября 2009

Ну, уродливый способ - использовать сессию и давать ей либо мажорные строки, либо определять где-то значение для них

Session["_page"] = _currentPage;
Session["_sortColumn"] = _currentSortColumn;
Session["_sortDir"] = _currentSortDir;

Или вы можете запутаться и вставить его в профиль пользователя. Затем загрузите значения в page_load или что-то в этом роде. Недостатком является то, что если кто-то уходит, возвращается через полчаса, он возвращается на страницу и т. Д., Где он был в последний раз. Если вы ищете их для навигации, например для подробных форм, а затем обратно, просто перенесите значения на следующую страницу. Затем вы можете вернуться назад со значениями в строке запроса или чем-то в этом роде.

Наслаждайтесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...