如何读取所有行并填充GridView

时间:2014-09-09 14:27:32

标签: c# asp.net gridview

我有以下c#代码:

using (SqlConnection connection = new SqlConnection(connString))
{
    //Get Parent Task
    SqlCommand command = new SqlCommand(queryStringParent, connection);
    connection.Open();

    SqlDataReader reader = command.ExecuteReader();
    if (!string.IsNullOrEmpty(fkobjectid) && fkobjectid != " ")
    {
        if (reader.HasRows)
        {
            gvParentTasks.DataSource = reader;
            gvParentTasks.DataBind();
        }
        while (reader.read())
        {
        }
    }
}

如果仅使用第一行填充GridView(gvParentTasks)。如何使用while (reader.read())读取所有行并为所有行填充GridView?

4 个答案:

答案 0 :(得分:3)

实际上你需要做得更难。您可以在前端创建页面。您所要做的就是:

<asp:SqlDataSource
    id="sdsOrderReview" runat="server"
    ConnectionString="<%$ ConnectionStrings:ECommerceDB %>"
    ProviderName="System.Data.SqlClient"
    SelectCommand="SELECT [OrderId], [AccountId], [Name]
        FROM [Order] ORDER BY [OrderId] DESC">

</asp:SqlDataSource>

这是一个简单的例子,然后对于你的网格视图,你需要做的就是:

<asp:GridView id="gvOrder" runat="server" DataSourceId=sdsOrderReview">

然后它会自动用您查询中的数据填充网格。此外,它将存在于整个页面状态。通过后端执行此操作,您必须确保在页面加载时调用它,因为您可能遇到持续存在的问题。

答案 1 :(得分:2)

您应该使用SqlDataAdapter代替填写DataSet,然后填充GridView

using (SqlConnection connection = new SqlConnection(connString))
{
    //Get Parent Task
    SqlCommand command = new SqlCommand(queryStringParent, connection);
    connection.Open();

    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(command);

    if (!string.IsNullOrEmpty(fkobjectid) && fkobjectid != "&nbsp;")
    {
        da.Fill(ds);

        gvParentTasks.DataSource = ds.Tables[0];
        gvParentTasks.DataBind();
    }
}

答案 2 :(得分:1)

只需从代码中删除while (reader.read()),您就会看到来自DataReader

的数据
SqlDataReader reader = command.ExecuteReader();
gvParentTasks.DataSource = reader;
gvParentTasks.DataBind();

答案 3 :(得分:1)

最简单的方法:使用SqlDataAdapter来填充DataTable

DataTable data = new DataTable();
using (var connection = new SqlConnection(connString))
using (var command = new SqlCommand(queryStringParent, connection))
using(var da = new SqlDataAdapter(command))
{
    // you don't need to open/close the connection with Fill
    da.Fill(data);
}
gvParentTasks.DataSource = data;
gvParentTasks.DataBind();

但是,对于SqlDataSource直接使用DataSource作为GridView也应该有效:

SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
gvParentTasks.DataSource = reader;
gvParentTasks.DataBind();

我认为你问题的原因是:

while (reader.read())
{
}

消耗所有记录。