0

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;

ご覧のとおり、2 番目の例では、ラベルの ID を知る必要があったため、ラベルに順番に名前を付けていない限り、反復処理が難しくなっています。将来、行に列を追加する必要があることを知っているので、ラベルに順番に名前を付けることなく、この行を反復処理する方法を探しています。(つまり、'Label1'、'Label2'、'Label3') これについてもっと良い方法はありますか?

4

1 に答える 1

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

次に、返されたラベルに基づいて処理を行います。

于 2012-07-10T18:50:16.870 に答える