2017-04-25 52 views
0

我必須在asp.net C#中添加最近18個月的下拉列表。在C#中添加最近18個月的下拉列表

我寫的邏輯來獲取過去18個月以下,

List<string> dateList= new List<string>(); 
    private List<string> GetDateDropDownList(DropDown pDropDown) 
    { 
     DateTime dt = DateTime.Now; 
     for (int i = 1; i <= 18; i++) 
     { 
      dt = dt.AddMonths(-1); 
      var month = dt.ToString("MMMM"); 
      var year = dt.Year; 
      dateList.Add(String.Format("{0}-{1}", month, year)); 
     } 
     return dateList; 
     } 

現在我需要添加此列表下拉。我正在嘗試,但它不工作。我如何將它添加到下拉菜單中?

回答

0

類似於其他人所說的,您只需將您的功能綁定到它。

但是,您的代碼中存在一個小問題。您在實際方法之外創建您的dateList,而不是其內部。您也不需要將下拉列表傳遞給該方法。

所以更新的方法應該是:

private List<string> GetDateDropDownList()// get rid of parameter 
{ 
    List<string> dateList= new List<string>(); // inside method 
    DateTime dt = DateTime.Now; 
    for (int i = 1; i <= 18; i++) 
    { 
     dt = dt.AddMonths(-1); 
     var month = dt.ToString("MMMM"); 
     var year = dt.Year; 
     dateList.Add(String.Format("{0}-{1}", month, year)); 
    } 
    return dateList; 
    } 

你綁定你的下拉菜單直接的方法

myDropdown.DataSource = GetDateDropDownList(); 
myDropdown.DataBind(); 

另外,與你原來的方法,你可以做以下的 - 注意它現在是一個無效並且不返回列表。

private void GetDateDropDownList(DropDown pDropDown) 
    { 
     List<string> dateList= new List<string>(); 
     DateTime dt = DateTime.Now; 
     for (int i = 1; i <= 18; i++) 
     { 
      dt = dt.AddMonths(-1); 
      var month = dt.ToString("MMMM"); 
      var year = dt.Year; 
      dateList.Add(String.Format("{0}-{1}", month, year)); 
     } 
     pDropDown.DataSource = dateList; 
     pDropDown.DataBind() 
     } 

而且你會簡單地傳遞在下拉列表中

GetDateDropDownList(myDropdownList); 
0

你在你的方法中所做的只是建立一個列表。你永遠不會把它添加到下拉菜單中。像這樣...

pDropDown.DataSource = dateList; 
pDropDown.DataBind(); 
0

您目前正在建設一個字符串列表,但爲了使您的下拉列表中可見,則需要專門設置DataSource屬性,然後調用DataBind()應用更改:

// This sets your data 
pDropDown.DataSource = dateList; 
// This actually binds the current data to the DropDownList control 
pDropDown.DataBind(); 

此外,您可能不會需要從該方法返回的任何值(除非你需要他們的某些其他原因),可以考慮將它返回void

private void SetDatesForDropDown(DropDown pDropDown, int monthsBack = 18) 
{ 
    List<string> dateList= new List<string>(); 
    DateTime dt = DateTime.Now; 
    for (int i = 1; i <= monthsBack; i++) 
    { 
     dt = dt.AddMonths(-1); 
     dateList.Add(dt.ToString("MMMM-yyyy")); 
    } 

    pDropDown.DataSource = dateList; 
    pDropDown.DataBind(); 
} 

或者乾脆去掉DropDown參數和使用方法的結果來設置DataSource

private void GetDateRanges(int monthsBack = 18) 
{ 
    List<string> dateList= new List<string>(); 
    DateTime dt = DateTime.Now; 
    for (int i = 1; i <= monthsBack; i++) 
    { 
     dt = dt.AddMonths(-1); 
     dateList.Add(dt.ToString("MMMM-yyyy")); 
    } 

    return dateList; 
} 

連同:

YourDropDown.DataSource = GetDateRanges(); 
YourDropDown.DataBind(); 
+0

感謝您一個和所有。 – 123456

0

有許多這樣做的方法,下面是一個這樣的方式。 只記得把它綁定到一個下拉列表。

編輯 - 獲取選定值

前端 - ASPX

<asp:DropDownList ID="DropDownList1" runat="server" OnLoad="DropDownList1_Load" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList> 

代碼隱藏 - C#

//Populate the DropDownList 
protected void DropDownList1_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     // Instantiate your DropDownList 
     DropDownList drpList = (DropDownList)sender; 

     List<string> dateList = new List<string>(); 
     DateTime dt = DateTime.Now; 
     for (int i = 1; i <= 18; i++) 
     { 
      dt = dt.AddMonths(-1); 
      var month = dt.ToString("MMMM"); 
      var year = dt.Year; 
      dateList.Add(String.Format("{0}-{1}", month, year)); 
     } 

     // Bind resulting list to the DropDownList 
     drpList.DataSource = dateList; 
     drpList.DataBind(); 
    } 
} 

//Get the Selected Value on change 
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     // assign the selected item value to a variable 
     string value = ((DropDownList)sender).SelectedValue; 
    } 

+0

@凱文...謝謝。這個事件方法適合我。 – 123456

+0

@Kevin ...如何從下拉列表中選擇列表項目值?我想將下拉列表中的選定日期存儲在變量中。 – 123456

+0

我已經編輯了我的答案,以及如何選擇列表項值。或者,如果您想從_SelectedIndexChanged_ –

相關問題