1

我正在使用以下代码将来自网格视图行的人员信息存储在列表中:

public class PlayerInfo
{
    public string FirstName { get; set; }
    public string Email { get; set; }
    public string DaysLeft { get; set; }
}


protected void btn_Click(object sender, EventArgs e)
{
    List<PersonInfo> person_list = new List<PersonInfo>();

          foreach (GridViewRow row in my_gridview.Rows)
        {
            CheckBox cb = (CheckBox)(row.Cells[2].FindControl("CheckBox"));
            if (cb.Checked)
            {
                person_list.Add(new PlayerInfo() {FirstName=row.Cells[0].Text,Email=row.Cells[2].Text,DaysLeft=row.Cells[5].Text});
            }
            else
            {

            }
        }

etc etc..

}

因此,如果我尝试输出 person_list[0] 这将不起作用,因为列表中的每个点都关联了三个项目,因此列表中的位置 0 包含名字、电子邮件和剩余天数。在 Visual Studio 中调试时,我可以看到这些项目正在正确存储。

我如何从这个列表中单独检索每个项目?例如,能够在循环中将值设置为变量,因此电子邮件地址将被分配给电子邮件变量,名字被分配给另一个等等?我只处理过普通数组,以前从未遇到过分层列表。

提前致谢。

4

4 回答 4

3

像这样使用 for 迭代它

for(int i =0; i <person_list.Count; i++)
{
  string name =  person_list[i].FirstName;
  string email =  person_list[i].Email;
  string daysLeft =  person_list[i].DaysLeft;
}
于 2012-07-29T16:57:06.750 回答
0

首先,您的列表变量是本地的,因此如果您想在类之外访问它,您需要在类级别声明它。

其次,当您在列表中添加PersonInfo对象时,您将PersonInfo退出列表。

就迭代而言,它可以通过任何循环来完成:

例子:

foreach(PersonInfo pInfo in person_list)
{
  // your code
} 
于 2012-07-29T16:57:52.067 回答
0

有几种方法可以从列表中获取值。

您可以使用 for 或 foreach 进行迭代:

for (var i=0; i<person_list.Count; i++) {
    var email=person_list[i].Email;
}

foreach(var person in person_list) {
    var email=person.Email;
}

或者您可以使用他们的索引访问各个成员:

var person=person_list[1];
if (person!=null) {
    var email=person.Email;
}

或者您可以使用 Linq 查询列表:

var person=person_list.FirstOrDefault(p=>p.FirstName=="Jack");
if (person!=null) {
    var email=person.Email; 
}

此外,要访问 GridViewRow 中的项目,您可以使用 GridViewRow.DataItem

foreach (GridViewRow row in my_gridview.Rows)
{
    var cb = (CheckBox)(row.Cells[2].FindControl("CheckBox"));
    if (cb.Checked)
    {
        person_list.Add(row.DataItem as PlayerInfo);
    }
 }
于 2012-07-29T17:00:01.543 回答
0

使用Listswith的一种漂亮方法GridViews是设置DataPropertyNames自定义列表中的属性名称并将其用作数据源,即

my_gridview.DataSource = person_list;

不要忘记设置my_gridview.AutoGenerateColumns = false;,除非您希望根据列表中的属性自动生成列。

于 2012-07-29T17:01:50.037 回答