我输出到WebGrid有问题,因为我的列表被覆盖了,所以到最后,我为网格上的每一行写了最后一行数据。我必须使用while循环,因为数据不断被添加到,我们正在查看很多数据,所以我不想写入另一个列表。
public class ChemData
{
string strSQLconnection = "Server=Server;Database=data;Uid=Username;Pwd=Password";
public int productId { get; set; }
public string productName { get; set; }
public List<ProdData> ProdList = new List<ProdData>();
public List<ProdData> ProdDataPull()
{
ProdData Analysis = new ProdData();
SqlDataReader reader = null;
SqlConnection conn = new SqlConnection(strSQLconnection);
SqlCommand query = new SqlCommand("Select * from producttable");
conn.Open();
query.Connection = new SqlConnection(strSQLconnection);
query.Connection.Open();
reader = query.ExecuteReader();
while (reader.Read())
{
if (!reader.IsDBNull(0)) Analysis.productId = reader.GetInt32(0);
if (!reader.IsDBNull(1)) Analysis.productName = reader.GetString(1);
ProdList.Add(Analysis);
}
return ChemList;
}
}
答案 0 :(得分:2)
这是因为Analysis
只创建一次。每次将其添加到列表中都会添加对同一对象的引用。将创建移动到while循环内部应解决此问题
while (reader.Read())
{
ProdData Analysis = new ProdData();
if (!reader.IsDBNull(0)) Analysis.productId = reader.GetInt32(0);
if (!reader.IsDBNull(1)) Analysis.productName = reader.GetString(1);
ProdList.Add(Analysis);
}
这会在循环的每次迭代中创建一个新的ProdData
对象,并将其分配给Analysis
,然后更新其内容并将该引用添加到列表中。
在循环外Analysis
创建Analysis
继续指向同一个ProdData
对象,该对象会反复添加到列表中,而每次都会覆盖其值。 / p>