1

7つの結果セットを返すSQLServerのストアドプロシージャがあります。このストアドプロシージャをASP.NETから呼び出し、ASP.NETページの7つのGridViewに結果を入力したいと思います。SqlDataReaderを使用してデータを取得していますが、GridViewを埋めるためのC#コードで苦労しています。

データを取得するための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();
            }
        }
    }
} 

この例をウェブで検索しましたが、何も見つかりませんでした。

リソースを知っていますか、または共有する小さな例がありますか?

ありがとう。

4

2 に答える 2

4

GridViewにバインドする複数のテーブルを持つことができるDataSetを使用する必要があります。

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

于 2010-11-18T12:16:13.167 に答える
1

最初の結果セットから次の結果セットに進むには、DataReaderの.NextResult()メソッドを使用する必要があります。このメソッドは、セットにさらに結果が存在する場合はTrueを返し、結果セットがこれ以上存在しない場合はFalseを返します。

.NextResult()を呼び出した後、GridViewを現在の結果セットにバインドできます。

コードは次のようになります。

SqlDataReader dr = DB.CheckDBIntegrity();

while (!dr.NextResult())
    {
       // bind results to appropriate grid
    }
于 2010-11-18T12:15:20.810 に答える