繁体   English   中英

检索存储在列表c#ASP.NET中的信息

[英]Retrieving information stored in a list c# ASP.NET

我使用以下代码从列表中的网格视图行存储人员的信息:

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中调试时,我可以看到正确存储的项目。

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

提前致谢。

像这样迭代它

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;
}

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

其次,当您在列表中添加PersonInfo对象时,您将从列表中获取PersonInfo

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

例:

foreach(PersonInfo pInfo in person_list)
{
  // your code
} 

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

您可以使用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);
    }
 }

使用GridViews Lists一种漂亮方法是将DataPropertyNames设置为自定义List中属性的名称,并将其用作DataSource,即

my_gridview.DataSource = person_list;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM