ASP.NET의 한 달 및 연도 드롭 다운 목록을 코딩하는 가장 좋은 방법은 무엇입니까?

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

  •  03-07-2019
  •  | 
  •  

문제

두 날짜 유형 요소에 대한 드롭 다운 목록이 필요한 내부 응용 프로그램이 있습니다. 그리고 년도. 이 값은 데이터베이스 또는 기타 정보 저장소에 없습니다.

나는 객체와 같은 사전에 추가하여 필요한 값을 가진 목록을 설정할 수 있다는 것을 알고 있습니다 (월을 숫자 표현과 상관시켜야합니다. 1 월 => 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()));
}

다른 팁

@Jesse Brown의 답변 확장 ...

a System.globalization 사용 지시문, 다음 코드가 있습니다.

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

이것은 다음과 같은 드롭 다운 목록을 생성합니다.

1 월 1 일 0 일 2 월 2 일 3 월 3 일 ... 12 월 12 일

추가 개선은 다음을 추가하여 현재 달을 표시하는 것일 수 있습니다.

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

for 루프 후.

다음은 @jesse-brown의 솔루션과 매우 유사한 내 솔루션입니다 (허용 답변).

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를 돕기 위해 VB.NET을 게시하고 있습니다. .NET 커뮤니티도.

ASP.NET MVC의 경우 이것이 제가하는 일입니다.

메모 나는 코드 비유를 사용하는 것을 선호합니다 이와 같은 것들에 대해서는 여전히보기의 일부이며 SelectList를 구성하는 View에는 아무런 문제가 없습니다.

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