我在db中有5条记录,我想在UI上显示它们,但是使用下面的代码在迭代时显示不同的对象,但是在列表中它显示相同的对象5次 帮助我,告诉我是否可以有更好的编码实践
我已使用For循环进行迭代,并将记录添加到朋友列表中
public ViewResult Contact()
{
Friends friend = new Friends();
List<Friends> friends = new List<Friends>();
string connectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("select * from Friends", con);
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
da.SelectCommand = cmd;
da.Fill(dt);
for (var i = 0; i < dt.Rows.Count; i++)
{
friend.friendId = Convert.ToInt32(dt.Rows[i]["FriendId"]);
friend.firstName = dt.Rows[i]["FirstName"].ToString();
friend.lastName = dt.Rows[i]["LastName"].ToString();
friend.currentAmountGiven = Convert.ToInt32(dt.Rows[i]["CurrentAmountGiven"]);
friend.totalAmount = Convert.ToInt32(dt.Rows[i]["TotalAmount"]);
friends.Add(friend);
}
return View(friends);
}
在“朋友”中,我从数据库获得5次相同的行
需要我上面所说的输出
答案 0 :(得分:2)
您需要在内部 Friends
实例化for loop
对象。
在您的情况下,您要在Friends
外部创建for loop
对象的实例,并在每次迭代中更改其属性的值,这就是为什么您的代码每次都以列表中的相同实例结尾时的原因。 / p>
您需要每次创建Friends
的新实例,每次都为其属性分配值,并在每次迭代中将其添加到列表中
for (var i = 0; i < dt.Rows.Count; i++)
{
Friends friend = new Friends(); // Change scope of friends from function level to for loop level.
friend.friendId = Convert.ToInt32(dt.Rows[i]["FriendId"]);
friend.firstName = dt.Rows[i]["FirstName"].ToString();
friend.lastName = dt.Rows[i]["LastName"].ToString();
friend.currentAmountGiven = Convert.ToInt32(dt.Rows[i]["CurrentAmountGiven"]);
friend.totalAmount = Convert.ToInt32(dt.Rows[i]["TotalAmount"]);
friends.Add(friend);
}
答案 1 :(得分:1)
您一次又一次地更改同一个朋友对象。
尽管属性每次都会更改,但仍然是相同的对象引用。
这应该有效:
public ViewResult Contact()
{
List<Friends> friends = new List<Friends>();
string connectionString =
ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("select * from Friends", con);
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
da.SelectCommand = cmd;
da.Fill(dt);
for (var i = 0; i < dt.Rows.Count; i++)
{
Friends friend = new Friends();
friend.friendId = Convert.ToInt32(dt.Rows[i]["FriendId"]);
friend.firstName = dt.Rows[i]["FirstName"].ToString();
friend.lastName = dt.Rows[i]["LastName"].ToString();
friend.currentAmountGiven = Convert.ToInt32(dt.Rows[i]["CurrentAmountGiven"]);
friend.totalAmount = Convert.ToInt32(dt.Rows[i]["TotalAmount"]);
friends.Add(friend);
}
return View(friends);
}
请参见Here,以了解有关引用类型的更多信息。
另外,还有一些编码技巧:
Friends
对象不是
实际上是朋友,这是Friend