使用while()结构时未填充Gridview。C#ASP.Net
我对此网格视图有问题。我正在用一个查询填充它。但是,如果我使用while(reader.Read())结构,它将不会填充甚至出现。如果没有while结构,它工作得很好。但是,我需要访问两个特定字段。代码如下使用while()结构时未填充Gridview。C#ASP.Net,c#,asp.net,gridview,sqldatareader,C#,Asp.net,Gridview,Sqldatareader,我对此网格视图有问题。我正在用一个查询填充它。但是,如果我使用while(reader.Read())结构,它将不会填充甚至出现。如果没有while结构,它工作得很好。但是,我需要访问两个特定字段。代码如下 SqlDataReader myReader; try { using (myConnection) { myConnection.Open(); ArrayList arrliGames = new ArrayList();
SqlDataReader myReader;
try
{
using (myConnection)
{
myConnection.Open();
ArrayList arrliGames = new ArrayList();
myReader = myCommand.ExecuteReader();
decimal decTicketCost = 0;
int intTicketCount = 0;
while (myReader.Read ())
{
decTicketCost = Convert .ToDecimal (myReader ["TicketCost"]);
intTicketCount =Convert .ToInt32 (myReader ["NumTickets"]);
}
//Binds listbox
grdEvents.DataSource = myReader ;
grdEvents.DataBind();
}
}
这只是前进。当您第一次遍历这些行时,其中没有“剩余内容”可供以后显示
我建议您使用阅读器在内存中填充强类型列表,然后将GridView绑定到该列表。例如:
var myList = new List<TicketInfo>();
while (myReader.Read())
{
myList.Add(new TicketInfo
{
TicketCost = Convert.ToDecimal(myReader["TicketCost"]),
NumTickets = Convert.ToInt32(myReader["NumTickets"])
});
}
grdEvents.DataSource = myList;
grdEvents.DataBind();
如果您以前没有使用过泛型(例如示例中的
List
),我建议您创建一个具有两个属性的类
1.退票
2.intTicketCount
现在,在while循环中创建实例并将值指定给对象属性
并将其添加到列表中
最后绑定列表。您可以替换
while (myReader .Read ())
{
decTicketCost = Convert .ToDecimal (myReader ["TicketCost"]); intTicketCount = Convert .ToInt32 (myReader ["NumTickets"]);
}
//Binds listbox
grdEvents.DataSource = myReader ;
grdEvents.DataBind();
到
grdEvents.DataSource=myReadergrdEvents.DataBind() 然后是一些值的gridview
希望此帮助我将您的datasource设置为
myList
而不是myReader
grdEvents.DataSource = myList;
编辑:您需要在列表对象中添加其他列
while (myReader .Read ())
{
//myList-- Add other columns you need to display in the gridview
//As I don't know the your Data Reader column, I can't give you exact mylist object
myList.Add(new TicketInfo{TicketCost = Convert.ToDecimal(myReader["TicketCost"]),NumTickets = Convert.ToInt32(myReader["NumTickets"]) });
}
替换以下行
grdEvents.DataSource = myReader;
与
这个怎么样:
using (myConnection)
{
myConnection.Open();
DataSet ds = myCommand.ExecuteDataSet();
//Binds listbox
grdEvents.DataSource = ds;
grdEvents.DataBind();
}
ForEach (DataRow dr in ds.tables[0].rows)
myList.Add(new TicketInfo{TicketCost = Convert.ToDecimal(myReader["TicketCost"]),NumTickets = Convert.ToInt32(myReader["NumTickets"]) });
@Nick删除您的初始
,而
块,当您调用DataBind
时,数据读取器将被枚举。强类型列表是什么意思。“你能给我举一个你所说的过程的例子吗?”尼克编辑了这篇文章,加入了一个简单的例子。我所说的强类型列表实际上是指“适当类型的泛型列表”。什么允许我使用这个列表?我的IDE一直说这不可能found@Nick将“”添加到文件顶部。如果我这样做,我的gridview将仅由票款金额和票款成本填充。正如我所说,我需要整行都显示在表中。您应该让类具有所需数量的成员变量来实现它。如果我这样做,我的gridview将只由票证金额和票证成本填充。正如我所说,我需要整排人都在场,我很困惑。添加另一列会有什么帮助?就像在列表中添加两列一样。我建议他添加成员变量来实现它。如果在类中声明的变量无助于完成它。是否在sql语句中选择了两列以上?
grdEvents.DataSource = myList;
using (myConnection)
{
myConnection.Open();
DataSet ds = myCommand.ExecuteDataSet();
//Binds listbox
grdEvents.DataSource = ds;
grdEvents.DataBind();
}
ForEach (DataRow dr in ds.tables[0].rows)
myList.Add(new TicketInfo{TicketCost = Convert.ToDecimal(myReader["TicketCost"]),NumTickets = Convert.ToInt32(myReader["NumTickets"]) });