代码之家  ›  专栏  ›  技术社区  ›  Mark Allison

如何从一个存储过程中填充多个GridView控件?

  •  1
  • Mark Allison  · 技术社区  · 14 年前

    我在SQL Server中有一个存储过程,它返回七个结果集。我想从ASP.NET调用这个存储过程,并用结果填充我的ASP.NET页面上的七个gridview。我正在使用一个SqlDataReader来获取数据,但是我正在努力使用C代码来填充gridview。

    我创建了一个DAL类来获取数据,我在其中使用了以下方法:

    public SqlDataReader CheckDataIntegrity()
    {
        SqlCommand cmd = new SqlCommand("cc.DataCheck");
        return MultipleResults(cmd);
    }
    

    helper方法MultipleResults如下所示:

    private SqlDataReader MultipleResults(SqlCommand cmd)
    {
        SqlConnection con = new SqlConnection(_connectionString);
        cmd.Connection = con;
    
        con.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        con.Close();
        return dr;
    
    }
    

    我试图调用我页面上的组件,如下所示:

    private void FillGridViews()           
    {
        DBUtil DB = new DBUtil();
        using (SqlDataReader dr = DB.CheckDataIntegrity())
        {
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    GridView1.DataSource = dr;
                    GridView1.DataBind();
                }
            }
        }
    } 
    

    我确实在网上搜索过这个例子,但什么也找不到。

    你知道一个资源,还是有一个小例子分享?

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Jazza    14 年前

    你需要使用 .NextResult() method 从第一个结果集前进到下一个结果集。如果集合中存在更多结果,则方法返回true,如果没有更多结果集,则返回false。

    在调用.NextResult()之后,可以将GridView绑定到当前结果集。

    您的代码可能如下所示:

    SqlDataReader dr = DB.CheckDBIntegrity();
    
    while (!dr.NextResult())
        {
           // bind results to appropriate grid
        }
    
        2
  •  4
  •   Arief    14 年前

    您应该使用可以有多个表绑定到GridView的数据集。

    var dataset = GetDataSetForMy7GridViews();
    
    // also valid: dataset.Tables["TableName"];
    GridView1.DataSource = dataset.Tables[0]; 
    GridView1.DataBind();
    
    GridView2.DataSource = dataset.Tables[1];
    GridView2.DataBind();
    
    GridView3.DataSource = dataset.Tables[2];
    GridView3.DataBind();
    
    GridView4.DataSource = dataset.Tables[3];
    GridView4.DataBind();
    
    GridView5.DataSource = dataset.Tables[4];
    GridView5.DataBind();
    
    GridView6.DataSource = dataset.Tables[5];
    GridView6.DataBind();
    
    GridView7.DataSource = dataset.Tables[6];
    GridView7.DataBind();
    

    因为您绑定到7个不同的GridView,所以需要这样做。如果您按照您的代码执行:

    >             while (dr.Read())
    >             {
    >                 GridView1.DataSource = dr;
    >                 GridView1.DataBind();
    >             }
    

    它将只绑定到1个GridView。

    补充: 也许这个链接是你问题的答案? http://www.codeguru.com/csharp/csharp/cs_network/database/article.php/c8715