コードビハインドでラベルの配列を作成できるかどうか知りたいです。そして、.aspxからのラベルをidを使用してlabel配列に配置し、これを使用して操作できる場合。
ありがとう
次のようなページの場合:
<body>
<form id="form1" runat="server">
<div id="labelSpace" runat="server">
<asp:Label ID="Label1" runat="server" Text="Label" Visible="false" >Label One</asp:Label><br />
<asp:Label ID="Label2" runat="server" Text="Label">Label Two</asp:Label><br />
<asp:Label ID="Label3" runat="server" Text="Label">Label Three</asp:Label><br />
<asp:Label ID="Label4" runat="server" Text="Label" Visible="false">Label Four</asp:Label></div><br />
<asp:Button ID="Button1" runat="server" Text="PostBack and Change Labels" />
</form>
これにより、すべてのラベルの配列が取得され<div id="labelSpace">
、他のコントロールは取得されません。
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)//This will only fire after button is clicked...
{
//This does [just as you ask] provide you with an array of labels
Label[] labels = this.labelSpace.Controls.OfType<Label>().ToArray<Label>();
//& Allows you to manipulate a label in the code behind
// by addressing it's index value;
labels[2].Text = "Modified In Code Behind";
//Something you may find more useful than an array is getting
// a list of labels like:
List<Label> listOfLabels = this.labelSpace.Controls.OfType<Label>().ToList<Label>();
//with a list you can identify an individual label easily like:
IEnumerable<Label> invisibleLabels = listOfLabels.Where(l => l.Visible == false);
//with an 'IEnemerable of invisible labels you can now manipulate those to make them all visible...
foreach (Label l in invisibleLabels)
{
l.Visible = true;
l.Text = "Made Visible";
}
//or, if you just want a single label where the id is "Label2"
var labelThree = labels.Where(p => p.ID == "Label2").First();
labelThree.Text = "selected by label id and then edited";
}
}
ページ レベルで開始する場合は、子コントロールにドリルダウンして masterControlCollection を作成し、次に呼び出す再帰ルーチンを構築する必要があります。".OfType<T>..."
ここまで来たら、LINQ を使用して、必要なプロパティに基づいて特定のラベルまたはラベルのセットを選択できます。
はい、できます。.aspx パーツのラベルには、分離コード ファイルに対応するオブジェクトがあります。特別なことは何もありません。他の .NET オブジェクトと同じです。たとえば、次のようなマークアップがある場合
<asp:Label runat="server" id="MyLabl1" Text="Some Text 1" />
<asp:Label runat="server" id="MyLabl2" Text="Some Text 2" />
<asp:Label runat="server" id="MyLabl3" Text="Some Text 3" />
<asp:Label runat="server" id="MyLabl4" Text="Some Text 4" />
コードビハインド ファイルには次のようなものがあります。
protected global::System.Web.UI.WebControls.Label MyLabl1;
protected global::System.Web.UI.WebControls.Label MyLabl2;
protected global::System.Web.UI.WebControls.Label MyLabl3;
protected global::System.Web.UI.WebControls.Label MyLabl4;
プロジェクトの設定方法に応じて、これは .cs ファイルまたは .designer.cs ファイルのいずれかにある場合があります。そこから、それらを配列に追加してそこから操作することを妨げるものは何もありません。
例えば
var labels = new Label[] { MyLabl1, MyLabl2, MyLabl3, MyLabl4 };
4 つのラベルで呼び出される配列を作成し、labels
それらに対して好きなことを行うことができます。それlabels[0]
から、最初のものにたどり着くことができます。これはあなたが考えていたことですか?
Label[] labels = new Label[10];
labels[0] = new Label();
labels[0].Text = "blablabla";
...
labels[9] = new Label();
labels[9].Text = "blablabla";