C# 如何读取所有行并填充GridView
我有以下c#代码:C# 如何读取所有行并填充GridView,c#,asp.net,gridview,C#,Asp.net,Gridview,我有以下c#代码: 如果仅使用第一行填充GridView(gvParentTasks)。如何使用while(reader.read())读取所有行并填充所有行的GridView?您应该使用SqlDataAdapter代替,填充数据集,然后填充GridView: using (SqlConnection connection = new SqlConnection(connString)) { //Get Parent Task SqlCommand command = new S
如果仅使用第一行填充GridView(
gvParentTasks
)。如何使用while(reader.read())
读取所有行并填充所有行的GridView?您应该使用SqlDataAdapter
代替,填充数据集,然后填充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 != " ")
{
da.Fill(ds);
gvParentTasks.DataSource = ds.Tables[0];
gvParentTasks.DataBind();
}
}
您应该改用SqlDataAdapter
,填充数据集
,然后填充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 != " ")
{
da.Fill(ds);
gvParentTasks.DataSource = ds.Tables[0];
gvParentTasks.DataBind();
}
}
你实际上是在让事情变得更难,然后你需要去做。您可以在前端创建页面。你所要做的就是:
<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">
你实际上是在让事情变得更难,然后你需要去做。您可以在前端创建页面。你所要做的就是:
<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">
只需从代码中删除while(reader.read())
,您就可以看到DataReader
SqlDataReader reader = command.ExecuteReader();
gvParentTasks.DataSource = reader;
gvParentTasks.DataBind();
只要从代码中删除while(reader.read())
,您就可以看到DataReader
SqlDataReader reader = command.ExecuteReader();
gvParentTasks.DataSource = reader;
gvParentTasks.DataBind();
最简单的方法是:使用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();
但是,对于GridView
直接使用SqlDataSource
作为DataSource
也可以:
SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
gvParentTasks.DataSource = reader;
gvParentTasks.DataBind();
我认为你的问题的原因是:
while (reader.read())
{
}
它会消耗所有记录。最简单的方法是:使用SqlDataAdapter
来填充数据表
:
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();
但是,对于GridView
直接使用SqlDataSource
作为DataSource
也可以:
SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
gvParentTasks.DataSource = reader;
gvParentTasks.DataBind();
我认为你的问题的原因是:
while (reader.read())
{
}
它消耗所有记录。它只显示一行:/@SearchForKnowledge,只需尝试上面的代码,不进行任何检查,它应该显示DataReader中的所有行
,确保从查询中返回多行它只显示一行:/@SearchForKnowledge,只需尝试上面的代码,不进行任何检查,它应该显示DataReader
中的所有行,确保从查询中返回多行数据源使用CommandArgument中的字符串,但这很好。下次我会记住:)谢谢you@SearchForKnowledge实际上,您也可以通过前端传递commandargue。它将通过Web方法或回发连接到后端。数据源使用CommandArgument中的字符串,但这很好。下次我会记住:)谢谢you@SearchForKnowledge实际上,您也可以通过前端传递commandargue。它将通过Web方法或回发连接到后端。