1

如何用中继器写出我的数组?

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>
4

6 回答 6

4

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


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

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

于 2009-06-15T19:42:10.103 回答
2

可以使用数组数组作为数据源(但不是二维数组),但是您必须以相反的方式排列它,以便每个内部数组都包含一个名称和一个数字。

不过,我更喜欢一种面向对象的方法,它提供了更多的结构,并且转发器代码变得更清晰:

为月份信息创建一个类:

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">
于 2009-06-15T19:59:15.483 回答
1

我建议使用 2 个单独的数组...

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

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

你是在处理真实的约会还是这只是你的例子?贾努阿里???

于 2009-06-15T19:42:11.337 回答
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> 
于 2009-06-16T00:13:36.597 回答
0

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

于 2009-06-15T19:45:16.277 回答
0

如果你真的在几个月内使用它,你最好创建一个枚举。然后您可以使用 <%# ((MonthsEnum)Container.DataItem).ToString() %> 作为名称和<%# (int)Container.DataItem %>编号

于 2009-06-15T19:47:02.417 回答