строка [,] и повторитель - PullRequest
1 голос
/ 15 июня 2009

Как выписать мой массив с повторителем?

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 ]

4 голосов
/ 15 июня 2009

Похоже, вы должны использовать перечисления в этом случае ... т.е. ...


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

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

2 голосов
/ 15 июня 2009

Можно было бы использовать массив массивов в качестве источника данных (но не двумерный массив), но вам нужно было бы расположить его по-другому, чтобы каждый внутренний массив содержал имя и число.

Я бы предпочел более ООП подход, хотя он дает немного больше структуры, а код повторителя становится намного чище:

Создать класс для информации о месяце:

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">
1 голос
/ 16 июня 2009

Вот глобализированная версия, в которой не нужно создавать класс и т. Д. *

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> 
1 голос
/ 15 июня 2009

Я бы порекомендовал использовать 2 отдельных массива ...

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

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

Вы работаете с реальными датами или это только ваш пример? Januari ???

0 голосов
/ 15 июня 2009

Вам лучше создать enum, если вы действительно используете его в течение нескольких месяцев. Затем вы можете использовать <% # ((MonthsEnum) Container.DataItem) .ToString ()%> для имени и <%# (int)Container.DataItem %> для числа

0 голосов
/ 15 июня 2009

Попробуйте использовать Словари (там очень удобный синтаксис инициализации) или перечисления .

...