【问题标题】:string [,] and repeater字符串 [,] 和中继器
【发布时间】:2009-06-15 19:37:00
【问题描述】:

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

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>

【问题讨论】:

  • 我将此问题提名为当天最不清晰的问题。
  • Welbog 和 apandit:你们 17 岁时会说多少种外语?
  • @Fredrik Mörk:两个,为什么?
  • 不要抱怨,编辑! ;)
  • 啊,注意到你是加拿大人;那是作弊 ;o) 这里的许多海报没有在英语国家长大的特权,但实际上必须在学校学习。有时我会因为对这一事实缺乏了解而感到有些恼火,尤其是在这个人还年轻的时候,就像在这种情况下一样。这可能不是您的意图,但很容易被误解。特别是如果英语不是您的母语。没什么大不了;让我们回到正题。

标签: c# asp.net arrays string repeater


【解决方案1】:

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

enum Month = {January=1, February, March}; Month month = Month.January; Month alsomonth = (Month)(1); // Should work

【讨论】:

    【解决方案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">
    

    【讨论】:

    • Det heter Augusti också, med "u" på båda sidor om "g" ;o)
    • “MonthIngo”应该是“MonthInfo”
    • 更正了两者。 / Rättat båda。 :)
    【解决方案3】:

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

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

    您使用的是真实日期还是这只是您的示例?一月???

    【讨论】:

    • 这可能会让您感到惊讶,但有些人说的语言与英语不同。
    • @Aistina,我不认为@J.13.L 对 OP 的语言有意见。这似乎更像是好奇心。
    • 哦...对不起,我没有冒犯的意思。我只是在问一个澄清问题。瑞典约会,现在我知道了。太酷了!
    【解决方案4】:

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

    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> 
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        如果您真的要使用几个月,最好创建一个枚举。然后您可以使用 作为名称,使用 &lt;%# (int)Container.DataItem %&gt; 作为数字

        【讨论】:

          猜你喜欢
          • 2011-06-03
          • 2020-06-14
          • 2011-08-13
          • 2011-06-28
          • 1970-01-01
          • 2021-04-06
          • 2021-07-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多