超过1000条记录的GridView问题

本文关键字:GridView 问题 记录 1000条 超过 | 更新日期: 2023-09-27 17:59:13

当我返回一个包含1000多条记录的记录集时,我遇到了一些性能问题。

有时记录在2100以上,但可能低至10。

我有一些批量操作,我通过选择所有记录来执行这些操作。

但是,当数值较低时,Gridview就可以了。当记录计数大于500时,我会在页面上看到性能问题。

我想做的是:如果记录超过500条,不要显示网格,而是显示一个导出到CSV的下载按钮或在页面上执行其他控制操作。

我的问题:即使我告诉它不要显示网格,而是显示一条消息和一个按钮,性能仍然很慢。

下面是我用于填充GridView的C#代码。删除了一些不重要的内容,以提高可读性。

如何调整C#代码以获得更好的性能

SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnectString"].ToString());
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SomeProcedure";
cmd.Parameters.Add(SearchParam);
try {
    DataTable GridData = new DataTable();
    conn.Open();
    using(SqlDataAdapter Sqlda = new SqlDataAdapter(cmd)) {
        Sqlda.Fill(GridData);
    }
    if (GridData.Rows.Count == 0) {
        lblSearchMsg.Text = "No Fee Records are in the Queue at this time.";
    } else {

        if (GridData.Rows.Count > 500) {
            lblSearchMsg.Text = "More than " + gridLimit.ToString() + " records returned.";
            //Show the download button
        } else {
            //Persist the table in the Session object. (for sorting)
            Session["GridData"] = GridData;
            lblRowCount.Text = "Count: " + GridData.Rows.Count.ToString();
            myGridView.DataSource = GridData;
            myGridView.DataBind();
            myGridView.Visible = true;
        }
    }
} catch (Exception ex) {
    //Do the error stuff
} finally {
    if (conn != null) {
        conn.Close();
    }
}

超过1000条记录的GridView问题

  1. 创建一个仅返回行计数的单独过程
    检查值是否为完全检索到的数据集的行计数,然后根据需要检索完整的数据集。

  2. 请记住,您可以使用相同的连接来进行两次检索,而无需关闭调用之间的连接。

  3. 如果您确定需要填充网格视图,并且不需要编辑数据,则可以在不使用适配器的情况下读取到DataTable中。以下是用using语句修改的基本想法,或者根据您的喜好尝试/catch:


    conn = new SqlConnection(connString);
    string query = "SELECT * FROM ....";
    SqlCommand cmd = new SqlCommand(query, conn);
    conn.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    DataTable dt = new DataTable();
    dt.Load(dr);
    GridView1.DataSource = dt;
    GridView1.DataBind();