我在ASP.NET C#中使用DataGrid
。我想限制和控制DataGrid
中显示的项目数(我被迫使用此控制器)。
我知道我们可以控制使用
每页AllowPaging = "TRUE"
使用DataSource
查询限制sql
,然后绑定(DataBind()
)。
但是我也不想要。我想运行一次sql
查询并获取所有数据,然后我必须能够根据要求显示前10或20个项目。
如果可以的话最好
在后面的代码中。
没有页面重新加载,如果我将项目大小从10增加到30
正确行进中的任何抬头
最佳答案
这里有两个可供考虑的选择。第一个使用DataTable
和Linq
来获取前x行。
DataTable dt = yourDataTableSource;
GridView1.DataSource = dt.AsEnumerable().Take(5).CopyToDataTable();
//Linq example with sorting added
//GridView1.DataSource = dt.AsEnumerable().OrderBy(x => x["columnName"]).Take(5).CopyToDataTable();
GridView1.DataBind();
或者,您可以使用通常在.aspx页上找到的相同属性。现在仅在后面的代码中设置了这些,您仍然可以使用当前数据源。
GridView1.PageSize = 5;
GridView1.AllowPaging = true;
GridView1.PagerSettings.Visible = false;
GridView1.DataBind();
或用于DataGrid
DataGrid1.PageSize = 10;
DataGrid1.AllowPaging = true;
DataGrid1.PagerStyle.Visible = false;
DataGrid1.DataBind();
为了完成您的问题,这里有一个小例子,让您开始如何在不刷新页面的情况下更改显示的项目。
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<!-- a ScriptManager is required when working with UpdatePanels -->
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="GridView1" runat="server"></asp:GridView>
<br />
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem Text="5 rows" Value="5"></asp:ListItem>
<asp:ListItem Text="10 rows" Value="10"></asp:ListItem>
<asp:ListItem Text="15 rows" Value="15"></asp:ListItem>
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
后面的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dt = yourDataTableSource;
GridView1.DataSource = dt;
GridView1.PageSize = 10;
GridView1.AllowPaging = true;
GridView1.PagerSettings.Visible = false;
GridView1.DataBind();
ViewState["GridView1Content"] = dt;
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
int pageSize = 10;
//always do validation with user input...
try
{
pageSize = Convert.ToInt32(DropDownList1.SelectedValue);
}
catch
{
}
GridView1.PageSize = pageSize;
GridView1.DataSource = ViewState["GridView1Content"] as DataTable;
GridView1.DataBind();
}
关于c# - 限制ASP.NET C#中的DataGrid项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39031358/