2011-04-24 81 views
1

我想知道如果我可以在代码后面创建一个标签数组。 然后,如果我可以将.aspx中的标签放在带有id的标签Array中并使用此操作。标签表ASP.net

感谢

+0

你是什么意思的“数组表”?从一个数组中创建一个HTML表(如果是这样,类型??)。 DataTable可能?扩展一些你的目标,这将有助于我们更好地理解这个问题。 – 2011-04-24 02:12:27

+0

哦,对不起,一系列标签 – ThorDozer 2011-04-24 02:14:42

+0

您能详细说明您要实现的目标吗?我怀疑有一个更有效的方式来达到预期的结果,而不是你提出的。 – 2011-04-24 03:03:53

回答

2

当然可以。 .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 }; 

将数组称为labels与它的4个标签,然后你可以做你希望他们不管。然后你可以做labels[0]去到第一个,等等。这是你想到的吗?

0

Label[] labels = new Label[10];
labels[0] = new Label();
labels[0].Text = "blablabla";
...

labels[9] = new Label();
labels[9].Text = "blablabla";

+0

我如何将标签(9)标识为aspx中的labelId? – ThorDozer 2011-04-24 02:39:44

+0

不知道你的意思,它是你的标签数组中的标签....它会是标签myLabel =(标签)标签[9]; – 2011-04-24 19:40:00

3

一个页面,看起来是这样的:

<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来选择一个特定的标签或基于你想要的任何属性的标签集。

+0

好的呼吁,把他们从控制集合中拿出来。 – R0MANARMY 2011-04-24 05:37:46