我遇到此网格视图的问题。我用查询填充它。但是,如果我使用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();
}
}
答案 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"]) });