Как заполнить множество элементов управления GridView из одной хранимой процедуры? - PullRequest
1 голос
/ 18 ноября 2010

У меня есть хранимая процедура в SQL Server, которая возвращает семь наборов результатов. Я хотел бы вызвать эту хранимую процедуру из ASP.NET и заполнить семь GridViews на моей странице ASP.NET с результатами. Я использую 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();
            }
        }
    }
} 

Я искал в Интернете пример этого, но ничего не смог найти.

Вам известен ресурс или есть небольшой пример, которым можно поделиться?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 18 ноября 2010

Вы должны использовать 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 голос
/ 18 ноября 2010

Вам нужно использовать метод .NextResult () вашего DataReader для перехода от первого набора результатов к следующему.Метод возвращает True, если в вашем наборе имеется больше результатов, или False, если наборов результатов больше не существует.

После вызова .NextResult () вы можете затем привязать ваш GridView к текущему набору результатов.

Ваш код может выглядеть так:

SqlDataReader dr = DB.CheckDBIntegrity();

while (!dr.NextResult())
    {
       // bind results to appropriate grid
    }
...