2012-07-10 44 views
0

在C#中使用GridView(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,因此就很難遍歷,除非我有順序命名標籤的第二個例子。我知道未來的需求是將更多的列添加到我的行中,所以我正在尋找一種方法來遍歷此行,而不必按順序命名標籤。 (即'標籤1','標籤2','標籤3')有沒有更好的方法來解決這個問題?

+0

你當然也可以給標籤真實姓名。潛在的維護編碼器會感謝你... – user1429080 2012-07-10 19:25:44

回答

1

您可以通過下面的代碼

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

那麼你處理基於在標籤返回聚集在GridView的所有標籤。

+0

我收到了一些無效的參數,將根添加到標籤列表中,所以我將標籤更改爲ArrayList。好消息是,它的工作原理!謝謝! – 2012-07-10 19:13:02

+0

Grr,我的語法標籤.Add(root)導致錯誤。我已修復它並將其更改爲labels.Add(根標籤)應該會很好。你的ArrayList方法也應該工作。 – 2012-07-10 19:22:15