string [,]和repeater

时间:2009-06-15 19:37:00

标签: c# asp.net arrays string repeater

如何用转发器写出我的阵列?

string[,] month = { {"Januari", "Februari", "Mars", "Apri", "Maj", "Juni", "Juli", "Agusti", "September", "November", "Oktober", "December"},
                    {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"}
                  };

现在我可以使用Container.DataItem,但是如何在一个地方获得第一个项目串而在另一个地方获得第二个项目?

<a href="Default.aspx?m=01">Januari</a>

6 个答案:

答案 0 :(得分:4)

在这种情况下看起来你应该使用枚举......即......


enum Month = {January=1, February, March};

Month month = Month.January;
Month alsomonth = (Month)(1); // Should work

答案 1 :(得分:2)

可以使用数组数组作为数据源(但不是二维数组),但是你必须以另一种方式安排它,这样每个内部数组都会包含一个名字和一个数字。

我更喜欢更多的OOP方法,它提供了更多的结构,转发器代码变得更加清洁:

为月份信息创建一个类:

public class MonthInfo {

   public string Name { get; private set; }
   public string Number { get; private set; }

   public MonthInfo(string name, string number) {
      Name = name;
      Number = number;
   }

}

现在,您可以创建一个对象数组,以用作转发器的数据源:

MonthInfo[] months = {
   new MonthInfo("Januari", "01"),
   new MonthInfo("Februari", "02"),
   new MonthInfo("Mars", "03"),
   new MonthInfo("April", "04"), // inte "Apri" ;)
   new MonthInfo("Maj", "05"),
   new MonthInfo("Juni", "06"),
   new MonthInfo("Juli", "07"),
   new MonthInfo("Augusti", "08"), // inte "Agusti" ;)
   new MonthInfo("September", "09"),
   new MonthInfo("Oktober", "10"), // kommer före november ;)
   new MonthInfo("November", "11"),
   new MonthInfo("December", "12")
};

MonthRepeater.DataSource = months;

在转发器中,您使用月份信息类的属性:

<asp:Repeater runat="server" id="MonthRepeater">
   <ItemTemplate>
      <a href="Default.aspx?m=<%#Eval("Number")>"%><%#Eval("Name")%></a>
   </ItemTemplate>
</asp:Repeater">

答案 2 :(得分:1)

我建议使用2个独立的阵列......

string[] month = {"Januari", "Februari"} // blah blah

string[] day = {"01", "02" } // blah blah 

您是在使用真实日期还是仅仅是您的榜样? Januari ???

答案 3 :(得分:1)

这是一个全球化的版本,可以避免必须创建一个类等....

protected void Page_Load(object sender, EventArgs e) {
     this.Culture = "sv-SE";
     var monthNames = System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthNames.ToList();
     this.MonthRepeater.DataSource = from month in monthNames
                                select new {
                                    Number = monthNames.IndexOf(month) + 1,
                                    Name = month
                                };
     this.MonthRepeater.DataBind();

}

ASPX:

<asp:Repeater runat="server" id="MonthRepeater">       
   <ItemTemplate>
      <a href="Default.aspx?m<%#Eval("Number")%>"><%#Eval("Name")%></a> 
   </ItemTemplate>
</asp:Repeater> 

答案 4 :(得分:0)

考虑使用Dictionaries(这是一种非常方便的初始化语法)或enums

答案 5 :(得分:0)

如果你真的在月份使用它,你最好创建一个枚举。然后你可以使用&lt;%#((MonthsEnum)Container.DataItem).ToString()%&gt;名称和<%# (int)Container.DataItem %>的数字