我使用以下代码从列表中的网格视图行存储人员信息:
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中调试时,我可以看到正确存储的项目。
如何从此列表中单独检索每个项目?例如,能够将值设置为循环中的变量,因此电子邮件地址将分配给电子邮件变量,第一个名称分配给另一个等等?我以前只处理过普通数组,之前从未遇到过分层列表。
提前致谢。
答案 0 :(得分:3)
使用像这样的
迭代它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;
}
答案 1 :(得分:0)
首先,你的列表变量是本地的,所以如果你想在你的课外访问它,你需要在课堂级别声明它。
其次,当您在列表中添加PersonInfo
个对象时,您会从列表中获得PersonInfo
。
就迭代而言,可以使用任何循环来完成:
示例:
foreach(PersonInfo pInfo in person_list)
{
// your code
}
答案 2 :(得分: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);
}
}
答案 3 :(得分:0)
将Lists
与GridViews
一起使用的一种漂亮方式是将DataPropertyNames
设置为自定义列表中属性的名称,并将其用作数据源,即
my_gridview.DataSource = person_list;
除非您希望根据列表中的属性自动生成列,否则不要忘记设置my_gridview.AutoGenerateColumns = false;
。