检索存储在列表c#ASP.NET中的信息
我使用以下代码将网格视图行中的个人信息存储在列表中:检索存储在列表c#ASP.NET中的信息,c#,asp.net,list,C#,Asp.net,List,我使用以下代码将网格视图行中的个人信息存储在列表中: 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<Perso
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..
}
公共类PlayerInfo
{
公共字符串名{get;set;}
公共字符串电子邮件{get;set;}
公共字符串DaysLeft{get;set;}
}
受保护的无效btn_单击(对象发送方,事件参数e)
{
List person_List=新列表();
foreach(my_gridview.Rows中的GridViewRow行)
{
复选框cb=(复选框)(行。单元格[2]。FindControl(“复选框”);
如果(cb.选中)
{
person_list.Add(new PlayerInfo(){FirstName=row.Cells[0]。Text,Email=row.Cells[2]。Text,DaysLeft=row.Cells[5]。Text});
}
其他的
{
}
}
等等。。
}
因此,如果我尝试输出person_list[0],这将不起作用,因为列表中的每个点都有三个相关项,因此列表中的位置0包含名字、电子邮件和剩余天数。在VisualStudio中调试时,我可以看到这些项被正确存储
如何从该列表中分别检索每个项目?例如,能够将值设置为循环中的变量,以便将电子邮件地址分配给一个电子邮件变量,将名字分配给另一个变量等等?我只处理过普通数组,以前从未遇到过层次结构列表
提前感谢。像这样重复使用它
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;
}
for(int i=0;i首先,您的列表变量是本地变量,因此如果您想在类之外访问它,您需要在类级别声明它
其次,当您在列表中添加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;
}
也可以使用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);
}
}
将列表
与网格视图
结合使用的一个好方法是将DataPropertyNames
设置为自定义列表中属性的名称,并将其用作数据源,即
my_gridview.DataSource = person_list;
不要忘记设置my_gridview.AutoGenerateColumns=false;
,除非您希望根据列表中的属性自动生成列。您在foreach循环中做什么?在原始帖子中编辑代码以包含foreach代码。
my_gridview.DataSource = person_list;