我在SQL Server中有一个存储过程,它返回七个结果集。我想从ASP.NET调用这个存储过程,并在我的ASP.NET页面上用结果填充七个GridView。我正在使用SqlDataReader来获取数据,但是我正在努力使用C#代码来填充GridViews。
我创建了一个DAL类来获取数据,我在那里有这个方法:
public SqlDataReader CheckDataIntegrity()
{
SqlCommand cmd = new SqlCommand("cc.DataCheck");
return MultipleResults(cmd);
}
辅助方法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();
}
}
}
}
我在网上搜索了一个例子,但找不到任何东西。
您是否了解资源,或者有一个小例子可以分享?
感谢。
答案 0 :(得分:4)
您应该使用DataSet,它可以将多个表绑定到GridViews。
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
答案 1 :(得分:1)
您需要使用DataReader的.NextResult() method从第一个结果集前进到下一个结果集。如果您的集合中存在更多结果,则该方法返回True;如果不存在更多结果集,则返回False。
在调用.NextResult()之后,您可以将GridView绑定到当前结果集。
您的代码可能如下所示:
SqlDataReader dr = DB.CheckDBIntegrity();
while (!dr.NextResult())
{
// bind results to appropriate grid
}