我在ASP.NET C#中使用DataGrid。我想限制和控制DataGrid中显示的项目数(我被迫使用此控制器)。

我知道我们可以控制使用


每页AllowPaging = "TRUE"
使用DataSource查询限制sql,然后绑定(DataBind())。


但是我也不想要。我想运行一次sql查询并获取所有数据,然后我必须能够根据要求显示前10或20个项目。

如果可以的话最好


在后面的代码中。
没有页面重新加载,如果我将项目大小从10增加到30


正确行进中的任何抬头

最佳答案

这里有两个可供考虑的选择。第一个使用DataTableLinq来获取前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/

10-15 08:38