2012-07-10 69 views
0

我有一個ListViewDropDownList裏面。我嘗試了兩種方法:在OnItemDataBoundPage_Load上填寫DropDownList。我也試過檢查PostBack,但沒有任何幫助。ListView中的DropDownList selectedValue總是第一個

當我試圖獲得價值時,我總是得到第一個。我知道這是因爲列表被重新填充,但如何避免它?如果我只在IsPostBack = false時填充它們,它們就變空了。

這是我的代碼:

<asp:ListView runat="server" ID="MyListView"> 
    <LayoutTemplate> 
     <table border="0" cellpadding="2" cellspacing="0"> 
      <tr> 
       <th><asp:Literal runat="server" Text='<%$ Resources: Resource, LabelWhole %>' /></th> 
       <th><asp:Literal runat="server" Text='<%$ Resources: Resource, LabelImport %>' /></th> 
       <th><asp:Literal runat="server" Text='<%$ Resources: Resource, LabelPeriod %>' /></th> 
       <th><asp:Literal runat="server" Text='<%$ Resources: Resource, LabelDate %>' /></th> 
       <th><asp:Literal runat="server" Text='<%$ Resources: Resource, LabelUpload %>' /></th> 
      </tr> 
      <asp:PlaceHolder ID="itemPlaceholder" runat="server" /> 
     </table> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <tr> 
      <td><%# DataBinder.Eval(Container.DataItem, "Whole") %></td> 
      <td><%# DataBinder.Eval(Container.DataItem, "Upload")%></td> 
      <td><%# DataBinder.Eval(Container.DataItem, "Period")%></td> 
      <td><asp:DropDownList runat="server" ID="DaysDropDownList"></asp:DropDownList></td> 
      <td><asp:FileUpload ID="FileUpload" runat="server" /></td> 
     </tr> 
    </ItemTemplate> 
</asp:ListView> 

foreach (var lvItem in MyListView.Items) 
{ 
    if (lvItem.ItemType == ListViewItemType.DataItem) 
    { 
     DropDownList dr = lvItem.FindControl("DaysDropDownList") as DropDownList; 
     for (int i = -1; i >= -12; i--) 
     { 
      dr.Items.Add(new ListItem(
       DateTime.Now.AddMonths(i).ToString("yyyy MM"), 
       DateTime.Now.AddMonths(i).ToString("yyyy MM"))); 
     } 
    } 
} 

代碼隱藏:

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.Application.DataLayer.LoadData(UserID); 
    this.MyListView.DataSource = this.Application.DataLayer.Data; 
    this.MyListView.DataBind(); 

    LoadDropDownLists(); 
} 

private void LoadDropDownLists() 
{ 
    foreach (var lvItem in MyListView.Items) 
    { 
     if (lvItem.ItemType == ListViewItemType.DataItem) 
     { 
      DropDownList dr = lvItem.FindControl("DaysDropDownList") as DropDownList; 
      dr.Items.Clear(); 
      for (int i = -1; i >= -12; i--) 
      { 
       dr.Items.Add(new ListItem(
        DateTime.Now.AddMonths(i).ToString("yyyy MM"), 
        DateTime.Now.AddMonths(i).ToString("yyyy MM"))); 
      } 
     } 
    } 
} 

public void SubmitButtonClick(object sender, EventArgs e) 
{ 
    foreach (var lvItem in MyListView.Items) 
    { 
     if (lvItem.ItemType == ListViewItemType.DataItem) 
     { 
      DropDownList dr = lvItem.FindControl("DaysDropDownList") as DropDownList; 
      FileUpload fl = lvItem.FindControl("FileUpload") as FileUpload; 
      if (fl.HasFile) 
      { 
       string filename = UploadFile(fl, dr.SelectedValue); 
       this.Application.DataLayer.SaveUploadRecord(UserID, 0, (int)UploadType.Upload, dr.SelectedValue, filename); 
      } 
     } 
    } 
} 

回答

0

當填充列表項的下拉列表,您可以設置相應的列表項的Selected屬性。

+0

我無法在數據綁定上設置選定的項目,因爲我不知道應該選擇哪個項目。在我的網站用戶選擇項目和pressess按鈕,然後我嘗試獲得價值,我總是得到第一個。 – JNM 2012-07-10 06:22:46

0

創建一個函數,在該函數中綁定下拉列表,在頁面加載時(在page_load事件中)每次調用此函數時,在調用它之前先清除現有的dropdownlist數據源。

+0

我剛剛嘗試過,它不起作用。我得到相同的結果。 – JNM 2012-07-10 06:06:52

+0

你可以分享你的代碼隱藏代碼嗎? – 2012-07-10 06:10:41

相關問題