我正在使用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();
}
}
答案 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();