使用While()结构时,Gridview不会填充。 C#ASP.Net

时间:2011-05-03 13:10:56

标签: c# asp.net gridview sqldatareader

我遇到此网格视图的问题。我用查询填充它。但是,如果我使用while(reader.Read())结构,它将不会填充甚至出现。没有while结构,它工作正常。但是,我需要访问两个特定字段。代码如下。

 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();
     }
 }

6 个答案:

答案 0 :(得分:4)

SqlDataReader仅向前发展。当您第一次遍历行时,其中“没有任何东西”可以显示在其后。

我建议您使用阅读器在内存中填充强类型列表,然后将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();

上面的代码示例假设您有一个名为TicketInfo的类定义为:

class TicketInfo
{
    public decimal TicketCost { get; set; }
    public int NumTickets { get; set; }
}

如果您之前没有使用过泛型(例如示例中的List<TicketInfo>),建议您do some reading on the subject

答案 1 :(得分:1)

创建一个包含两个属性的类 1. decTicketCost 2. intTicketCount

现在在while循环中创建实例并将值赋给对象属性

并将其添加到列表中。

最后绑定列表。

答案 2 :(得分:1)

我邀请您将数据源设置为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"])  });
}

答案 3 :(得分:0)

你可以替换

while (myReader .Read ())                        
{                             
decTicketCost  = Convert .ToDecimal (myReader ["TicketCost"]);                            intTicketCount = Convert .ToInt32 (myReader ["NumTickets"]);                             
}                              
//Binds listbox                         
grdEvents.DataSource = myReader ;                         
grdEvents.DataBind();  

要     grdEvents.DataSource = myReader;
    grdEvents.DataBind();

然后是某些值的gridview

希望这个帮助

答案 4 :(得分:0)

替换以下行

grdEvents.DataSource = myReader;

grdEvents.DataSource = myList;

答案 5 :(得分:0)

这个怎么样:

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"])  });