ASP.NET(4.5)GridView绑定到动态生成的SQL查询,具有分页和排序功能吗?

时间:2014-06-16 19:00:32

标签: asp.net gridview

我正在使用VS 2013(最新版本)和ASP.NET 4.5 WebForms应用程序。我需要运行返回数据的SQL命令,但这就是我在运行时对SQL的了解。我想在运行时将结果绑定到GridView并让它自动生成列。我也希望它支持排序和分页。

我研究过这个令人作呕的广告,我发现大量的例子都涉及到这一部分,但似乎并没有让所有方面同时出现。

有没有一些简单的方法可以做到这一点?在我看来,我应该能够将数据绑定到网格,并让它处理其他所有事情。

仅供参考,有问题的SQL命令存储在数据库的表中,以及有关参数的信息(如果有的话)。我的Web应用程序允许用户选择其中一个SQL命令,便于输入参数信息,并允许用户运行查询以将其导出为不同的格式,甚至为其运行Crystal Report。所以这就是我在运行时对SQL一无所知的原因。万一你关心。 :)

编辑:

所以这就是我想出来的。请注意,我删除了一堆与我的逻辑相关的代码,这些代码与此讨论并不相关,所以这可能无法编译,但它应该给你一个想法。

<asp:GridView runat="server" ID="gridView1" CssClass="XG_DataTable" 
                AllowSorting="true" AllowPaging="true" PageSize="20"
                OnPageIndexChanging="gridView1_OnPageIndexChanging"
                OnSorting="gridView1_OnSorting"
                AutoGenerateColumns="true">
</asp:GridView>

...

public partial class ViewGrid
{
    private bool SortAscending
    {
        get
        {
            var result = ViewState["SortAscending"];
            return (result == null) || ((bool) result);
        }
        set { ViewState["SortAscending"] = value; }
    }

    private string SortExpression
    {
        get
        {
            var result = ViewState["SortExpression"];
            return result == null ? "" : result.ToString();
        }
        set
        {
            if (value == SortExpression)
                SortAscending = !SortAscending;
            else
            {
                ViewState["SortExpression"] = value;
                SortAscending = true;
            }
        }
    }

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

    private void BindGridView()
    {
        gridView1.DataSource = GetData();
        gridView1.DataBind();
    }

    private object GetData()
    {
        var dataTable = GetUnsortedData();

        var sortExpression = SortExpression;
        if (string.IsNullOrEmpty(sortExpression))
            return dataTable;

        var dv = new DataView(dataTable);
        dv.Sort = string.Format("{0} {1}", sortExpression, SortAscending ? "asc" : "desc");
        return dv;
    }

    private DataTable GetUnsortedData()
    {
        // retrieve the data from the database
    }

    protected void gridView1_OnPageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gridView1.PageIndex = e.NewPageIndex;
        BindGridView();
    }

    protected void gridView1_OnSorting(object sender, GridViewSortEventArgs e)
    {
        SortExpression = e.SortExpression;
        BindGridView();
    }
}

2 个答案:

答案 0 :(得分:2)

这是一个样本

HTMl标记:

<asp:GridView runat="server" AllowPaging="true" AllowSorting="true"     
id="mygrid" AutoGenerateColumns="true"></asp:GridView>

您可以将 PageSize 设置为每页显示的数据源行数。

<强> C#

protected void Page_Load(object sender, EventArgs e)
 {
       if (!Page.IsPostBack)
       {
          gvBind(); //Bind gridview
       }
}

public void gvBind()
{    SqlDataAdapter dap = new SqlDataAdapter("select query", conn);
     DataSet ds = new DataSet();
     dap.Fill(ds);
     mygrid.DataSource = ds.Tables[0];
     mygrid.DataBind();
}

protected void PageIndexChanging(object sender, GridViewPageEventArgs e)
{
       mygrid.PageIndex = e.NewPageIndex;
       gvBind();
}

答案 1 :(得分:0)

获取数据集中的数据并将gridview数据源设置为该数据集。

前端

<asp:GridView runat="server" AllowPaging="true" AllowSorting="true"     id="mygrid" AutoGenerateColumns="true"></asp:GridView>

然后代码

 mygrid.DataSource = dataset
           mygrid.DataBind();