ما هي أفضل طريقة إلى رمز تصل في الشهر و السنة المنسدلة قائمة ASP.NET?

StackOverflow https://stackoverflow.com/questions/812330

  •  03-07-2019
  •  | 
  •  

سؤال

يجب تطبيق داخلي أنني يحتاج إلى القائمة المنسدلة لمدة سنتين من تاريخ نوع العناصر: الشهر و العام.هذه القيم ليست في قاعدة البيانات أو غيرها من مستودع المعلومات.

أنا أعرف فقط يمكن إعداد قائمة مع القيم أحتاج طريق إضافتها إلى القاموس مثل الكائن (أنا بحاجة إلى ربط الشهر إلى التمثيل العددي ، كانون الثاني / يناير => 01):

var months = new Dictionary<String,String>();
months.Add("01", "January");
...

القائمة المنسدلة لهذا العام سوف يكون أسهل قليلا كما أنا يمكن أن مجرد اختيار بدء العام و تكرار حتى الحالية أو الراهنة+1 السنة قائمة عامة.

هل هناك طريقة أفضل للتعامل مع هذه البيانات العناصر ؟ شيء بني ، أو تصميم جيد النمط الذي ينبغي أن يكون تنفيذ?

هل كانت مفيدة؟

المحلول

هل يمكن استخدام هذا للحصول على قائمة بجميع أسماء شهر وحلقة من خلال ذلك.

CultureInfo.CurrentCulture.DateTimeFormat.MonthNames

يمكنك استخدامه مثل هذا...باستخدام مؤشر شهر قيمة المنسدلة الخاصة بك

var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
for (int i = 0; i < months.Length; i++)
{
     ddl.Items.Add(new ListItem(months[i], i.ToString()));
}

نصائح أخرى

تمديد @جيسي براون الإجابة...

مع باستخدام النظام.العولمة التوجيه لدي البرمجية التالية:

for (int x = 0; x < 12; x++)
{
    cboMonth.Items.Add
    (
       (x+1).ToString("00") 
       + " " 
       + CultureInfo.CurrentCulture.DateTimeFormat.MonthNames.GetValue(x)
     );
}

وتنتج هذه القائمة المنسدلة التي تبدو مثل:

01 كانون الثاني / يناير 02 شباط / فبراير 03 آذار / مارس ...12 كانون الأول / ديسمبر

مزيد من الصقل قد يكون لجعل عرض الشهر الشهر الحالي بإضافة:

cboMonth.Text = DateTime.Now.Month.ToString("00") 
   + " " 
   + CultureInfo.CurrentCulture.DateTimeFormat.MonthNames.GetValue(DateTime.Now.Month);

بعد حلقة.

هنا الحل, والتي هي مشابهة جدا @جيسي-براون الحل (الجواب المقبول)

VB.NET:

في وظائف الفئة:

Public Shared Function GetMonthList() As Generic.Dictionary(Of String, String)
    Dim months As New Generic.Dictionary(Of String, String)()
    For m As Int32 = 1 To 12
        months.Add(String.Format("{0:0#}", m), CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(m))
    Next

    Return months
End Function

على صفحة ASPX:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ddMonth.DataSource = GlobalFunctions.GetMonthList()
    ddMonth.DataValueField = "Key"
    ddMonth.DataTextField = "Value"
    ddMonth.DataBind()

End Sub

هذا التطبيق هو في VB.NET لأن ذلك يحدث أن يكون ما هذا webapp هو استخدام (تراث) ، ومع ذلك شكرا جزيلا لك على الأمثلة في C# (لغتي المفضلة) أنا نشر VB.NET هنا لمساعدة VB.NET المجتمع أيضا.

بالنسبة ASP.NET MVC هذا هو ما أقوم به.

ملاحظة أنا أفضل أن استخدام codebehind من أجل مثل هذه الأمور - لا يزال جزء من عرض و لا يوجد شيء خاطئ مع إطلالة بناء SelectList.

PaymentControl.ascx

 <%= Html.DropDownList("ExpirationMonth", ExpirationMonthDropdown)%> / 
 <%= Html.DropDownList("ExpirationYear", ExpirationYearDropdown)%>

PaymentControl.ascx.cs

public partial class PaymentControl : ViewUserControl<CheckoutModel>
    {
        public IEnumerable<SelectListItem> ExpirationMonthDropdown
        {
            get
            {
                return Enumerable.Range(1, 12).Select(x =>

                    new SelectListItem()
                    {
                        Text = CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[x - 1] + " (" + x + ")",
                        Value = x.ToString(),
                        Selected = (x == Model.ExpirationMonth)
                    });
            }
        }

        public IEnumerable<SelectListItem> ExpirationYearDropdown
        {
            get
            {
                return Enumerable.Range(DateTime.Today.Year, 20).Select(x =>

                new SelectListItem()
                {
                    Text = x.ToString(),
                    Value = x.ToString(),
                    Selected = (x == Model.ExpirationYear)
                });
            }
        }
    }

أدناه هو رمز لتحميل الشهر المنسدلة كما حدد

    private void LoadMonth()
    {
        ddlmonth.Items.Add(new ListItem("Select", 0.ToString()));
        var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
        for (int i = 0; i < months.Length-1; i++)
        {
            ddlmonth.Items.Add(new ListItem(months[i], (i+1).ToString()));
        }
    }
 public void bind_month()
    {
        var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;

        ddl_month.Items.Insert(0, new ListItem("--Select--", "0"));

        for (int i = 0; i < months.Length-1; i++)
        {
            ddl_month.Items.Add(new ListItem(months[i],(i+1).ToString()));
        }

    }

/جرب هذا الكود لربط كل شهر في القائمة المنسدلة بدون استخدام قاعدة البيانات/

 public void GetMonthList(DropDownList ddl)
    {
        DateTime month = Convert.ToDateTime("1/1/2000");
        for (int i = 0; i < 12; i++)
        {
            DateTime NextMont = month.AddMonths(i);
            ListItem list = new ListItem();
            list.Text = NextMont.ToString("MMMM");
            list.Value = NextMont.Month.ToString();
            ddl.Items.Add(list);
        }
        //ddl.Items.Insert(0, "Select Month");
        ddl.Items.FindByValue(DateTime.Now.Month.ToString()).Selected = true;
    }

يمكنك أن تجرب هذا...المرجع هنا:

http://allinworld99.blogspot.com/2015/01/bind-monthsyear-dropdownlist-c-aspnet.html

for (int i = 1; i <= 12; i++)
{
    drpBMonth.Items.Add(new System.Web.UI.WebControls.ListItem(DateTimeFormatInfo.CurrentInfo.GetMonthName(i), i.ToString()))};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top