Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用while()结构时未填充Gridview。C#ASP.Net_C#_Asp.net_Gridview_Sqldatareader - Fatal编程技术网

使用while()结构时未填充Gridview。C#ASP.Net

使用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();

我对此网格视图有问题。我正在用一个查询填充它。但是,如果我使用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();
     }
 }
这只是前进。当您第一次遍历这些行时,其中没有“剩余内容”可供以后显示

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