Пейджинг работает Сортировка завершается с ошибкой управления ASP.NET Gridview в IList - PullRequest
0 голосов
/ 02 апреля 2012

Страница ASPX: -Gridview Control, как показано ниже

 <asp:GridView ID="gidtest" runat="server" AutoGenerateColumns="False" BackColor="White"
        BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" CellPadding="4" Width="100%"
        AllowPaging="True" AllowSorting="True" 
        OnPageIndexChanging="gidtest_PageIndexChanging" OnSorting="gidtest_Sorting">
        <Columns>
            <asp:BoundField DataField="MinistryName" HeaderText="Name" SortExpression="MinistryName"
                ItemStyle-Width="40%" >
<ItemStyle Width="40%"></ItemStyle>
            </asp:BoundField>
        </Columns>
        <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
        <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
        <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
        <PagerSettings FirstPageText="first" LastPageText="last" Mode="NumericFirstLast" PageButtonCount="2"/>
        <RowStyle BackColor="White" ForeColor="#330099" />
        <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
        <SortedAscendingCellStyle BackColor="#FEFCEB" />
        <SortedAscendingHeaderStyle BackColor="#AF0101" />
        <SortedDescendingCellStyle BackColor="#F6F0C0" />
        <SortedDescendingHeaderStyle BackColor="#7E0000" />
    </asp:GridView>

Код позади: -На загрузке страницы, передающей список в Gridview.-На событии подкачки связывает список.


-На событии сортировки пытается получить источник данных, но возвращается NULL


protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {

            this.gridProjects.DataSource = GetList(); //A IList collection of BOL, which has MinistryName proeprty.
        this.gridProjects.DataBind();
    }
    ////Log before exiting from the Function.
    WebRole.Logger.Write(Page.Title.ToString() + Resources.ExitPageLoad);
}

    GetList()
    {
    return new List<CustomClass>();
    }

    public Class CustomClass
    {
    public string MinistryName {get;set;}
    }



     protected void gidtest_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        if (e != null)
        {
            this.GetUserProjects();
            this.gridProjects.PageIndex = e.NewPageIndex;
            this.gridProjects.DataBind();
        }
    }

     protected void gridProjects_Sorting(object sender, GridViewSortEventArgs e)
    {

        try
        {
           DataTable dt =((DataSet)(gridProjects.DataSource)).Tables[0];
           dt.DefaultView.Sort = e.SortExpression +"" + e.SortDirection;

           gridProjects.DataSource = dt;

        }
        catch (Exception ex)
        {

            throw ex;
        }

    } 

Любая помощь?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

Источник данных не возвращается при обратной передаче, вам потребуется снова получить данные.

Вы используете список объектов, поэтому вам может понадобиться реализовать сортировку общего списка, как описано здесь , если только вы не можете упорядочить список, когда он будет построен.

protected void gridProjects_Sorting(object sender, GridViewSortEventArgs e)
{


     List<CustomClass> lst = GetList();

     if (e.SortDirection == "Ascending"){
          lst.Sort(new GenericComparer<CustomClass>(e.SortExpression,SortDirection.Ascending);
     }else{
          lst.Sort(new GenericComparer<CustomClass>(e.SortExpression,SortDirection.Descending);
     }

     gridProjects.DataSource = lst;
     gridProjects.DataBind();
} 
0 голосов
/ 02 апреля 2012
  1. Добавить пробел между e.SortExpression и e.SortDirection
  2. Добавить this.gridProjects.DataBind(); после gridProjects.DataSource = dt;

Попробуйте это:

protected void gridProjects_Sorting(object sender, GridViewSortEventArgs e)
{
  try
    {
       DataTable dt =((DataSet)(gridProjects.DataSource)).Tables[0];
       dt.DefaultView.Sort = e.SortExpression + " " + e.SortDirection;

       gridProjects.DataSource = dt;
       this.gridProjects.DataBind();
    }
    catch (Exception ex)
    {
        throw ex;
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...