【问题标题】:Iterate through GridView Row with Labels使用标签遍历 GridView 行
【发布时间】:2012-07-11 03:21:07
【问题描述】:

在 C# (ASP.NET) 中使用 GridView,我正在尝试遍历单行。通常如果我可以提取每个单元格中的文本不会太难:

string text = SecGrpGridView.Rows[0].Cells[i].Text;

但是,我的行中的某些字段包含标签,我相信提取值的唯一方法是使用 FindControl() 并将其转换为标签:

Label myLabel = (Label)SecGrpGridView.Rows[0].Cells[i].FindControl("Label5");
string text = myLabel.Text;

如您所见,第二个示例需要知道标签的 ID,因此除非我按顺序命名标签,否则难以迭代。我知道未来需要在我的行中添加更多列,所以我正在寻找一种方法来迭代这一行,而不必按顺序命名标签。 (即'Label1'、'Label2'、'Label3')有没有更好的方法来解决这个问题?

【问题讨论】:

  • 你当然也可以给标签实名。潜在的维护编码员会感谢您...

标签: c# asp.net .net gridview


【解决方案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;
}

那你根据返回的标签进行处理吗。

【讨论】:

  • 我得到了一些无效的参数,将根添加到标签列表中,所以我将标签更改为 ArrayList。好消息是,它有效!谢谢!
  • Grr,我的语法标签。Add(root) 导致错误。我已经修复它并将其更改为标签。添加(根作为标签)应该做得很好。您的 ArrayList 方法也应该有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 2019-08-07
  • 2011-08-14
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多