在C#(ASP.NET)中使用GridView,我正在尝试迭代一行。通常,如果我能在每个单元格中提取文本,那就不会太困难了:
string text = SecGrpGridView.Rows[0].Cells[i].Text;
但是,我的行中的某些字段包含标签,我相信提取值的唯一方法是使用FindControl()并将其转换为Label:
Label myLabel = (Label)SecGrpGridView.Rows[0].Cells[i].FindControl("Label5");
string text = myLabel.Text;
正如您所看到的,第二个示例我需要知道我的标签的ID,因此除非我按顺序命名标签,否则很难迭代。我知道将来需要在我的行中添加更多列,所以我正在寻找一种迭代这一行的方法,而不必按顺序命名标签。 (即'Label1','Label2','Label3')有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
您可以使用以下代码
收集GridView中的所有标签public static List<Label> FindLabelRecursive(Control root)
{
List<Label> labels = new List<Label>();
if (root is Label)
{
labels.Add(root as Label);
return labels;
}
foreach(Control c in root.Controls)
{
if (c is Label)
{
labels.Add(c);
}
else
{
List<Label> childLabels = FindLabelRecursive(c);
labels.AddRange(childLabels);
}
}
return labels;
}
然后根据返回的标签进行处理。