【问题标题】:Bind, Sort & Paging a GridView from Class从类中绑定、排序和分页 GridView
【发布时间】:2013-03-14 11:48:17
【问题描述】:

我正在研究一个类来在 C# 中对我的GridView 进行数据绑定...

我已经做到了,所以我的寻呼机可以正常工作,但不确定我将如何进行排序工作...... 到目前为止,我的代码如下所示:

public static class Binder
{
public class gridView {
    public static void Bind(GridView grid, IList source, bool pager, bool sorting) {
        grid.DataSource = source;
        if (pager) {
            grid.PageIndexChanging += new GridViewPageEventHandler(PageIndexChanging);
        }
        if (sorting) {
            grid.Sorting += new GridViewSortEventHandler(Sorting);
        }
        grid.DataBind();
    }

    public static void PageIndexChanging(object sender, GridViewPageEventArgs e) {
        if (sender != null) {
            GridView GridView1 = sender as GridView;
            GridView1.PageIndex = e.NewPageIndex;
            GridView1.DataBind();
        }
    }
    public static void Sorting(object sender, GridViewSortEventArgs e) {
        if (sender != null) {
            GridView GridView1 = sender as GridView;
            //What to do?
            GridView1.DataBind();
        }
    }
}
}

我会像这样绑定一个gridview:Binder.gridView.Bind(MyGridView, MyDataSource, true, true);

但我对如何进行排序有点迷茫?

【问题讨论】:

  • 你为什么要以如此复杂的方式来做呢?只是好奇。
  • 只是觉得这是个好方法?但欢迎任何建议:)
  • 基本上你需要对你的数据源进行排序并重新绑定。这可能会指向您的解决方案:stackoverflow.com/questions/3966835/sorting-gridview?rq=1
  • 但后来的想法是在里面有Repeater类..所以我可以调用Binder.Repeater.Bind();

标签: c# asp.net sorting gridview


【解决方案1】:

您需要在您的 aspx 中启用排序 - AllowSorting="True"

<asp:GridView ID="grid" runat="server" DataKeyNames="id" AutoGenerateColumns="False"
                AllowPaging="True" AllowSorting="True" PageSize="25" CellPadding="4" BorderStyle="None"
                OnRowDataBound="gvProfileSearch_RowDataBound" Width="100%" Translate="true">

对于 IList,您可以使用 OrderBy-Function

IList<T> tmp = new IList<T>();
tmp.OrderByDescending...
tmp.OrderBy...

【讨论】:

  • 很清楚 :) 但它是在我需要帮助的地方进行排序的代码。
  • OrderBy 返回一个 Enumerable 列表,然后我得到错误,我不支持服务器端分页...
【解决方案2】:

此代码用于绑定、分页和排序......

 protected void RadgvData_SortCommand(object sender, GridSortCommandEventArgs e)
        {
            GridTableView tableView = e.Item.OwnerTableView;
            e.Canceled = true;
            GridSortExpression expression = new GridSortExpression();
            expression.FieldName = e.SortExpression;
            if (tableView.SortExpressions.Count == 0 || tableView.SortExpressions[0].FieldName != e.SortExpression)
            {
                expression.SortOrder = GridSortOrder.Descending;
            }
            else if (tableView.SortExpressions[0].SortOrder == GridSortOrder.Descending)
            {
                expression.SortOrder = GridSortOrder.Ascending;
            }
            else if (tableView.SortExpressions[0].SortOrder == GridSortOrder.Ascending)
            {
                expression.SortOrder = GridSortOrder.Descending;
            }

            tableView.SortExpressions.AddSortExpression(expression);
            RadgvData.Rebind();

        }

        protected void RadgvData_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            try
            {
                DataTable dtData = objCutTypeBAL.getCutTypeDetail(string.Empty);
                if (dtData.Rows.Count > 0)
                {
                    RadgvData.DataSource = dtData;
                }
                else
                {
                    RadgvData.DataSource = String.Empty;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        protected void RadgvData_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridPagerItem)
            {
                RadgvData.PagerStyle.AlwaysVisible = true;
            }
            if (e.Item is GridDataItem && e.Item.OwnerTableView.DataMember != "ChildCutType")
            {
                GridDataItem dataitem = (GridDataItem)e.Item;

                ImageButton imgDel = (ImageButton)dataitem["Delete"].Controls[0];
                string strCutType;
                strCutType = dataitem.GetDataKeyValue("CutType").ToString();
                DataTable dtData = objCutTypeBAL.getCutTypeDetail(strCutType);
                if (dtData.Rows.Count > 0)
                {
                    imgDel.Visible = false;
                }
            }
        }

        protected void RadgvData_PageIndexChanged(object sender, GridPageChangedEventArgs e)
        {
            RadgvData.CurrentPageIndex = e.NewPageIndex;
            popGrid();
        }

【讨论】:

    猜你喜欢
    • 2012-08-23
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2012-11-29
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多