2012-07-10 7 views
0

J'ai un ListView avec DropDownList à l'intérieur. J'ai essayé les deux: remplir DropDownList sur OnItemDataBound et dans Page_Load. J'ai également essayé de vérifier PostBack, mais rien ne aide. Quand j'essaie d'obtenir de la valeur, je reçois toujours le premier. Je comprends que c'est parce que les listes sont remplies, mais comment l'éviter? Si je les remplis seulement quand IsPostBack = false, ils sont devenus vides.DropDownList dans ListView selectedValue toujours le premier

Ceci est mon code:

<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"))); 
     } 
    } 
} 

Codebehind:

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); 
      } 
     } 
    } 
} 

Répondre

0

Lorsque vous remplissez votre DROPDOWNLIST avec ListItem, vous pouvez définir en conséquence la propriété sélectionnée de la ListItem.

+0

Je ne peux pas définir l'élément sélectionné sur la base de données, car je ne sais pas quel élément doit être sélectionné. Dans mon site Web, l'utilisateur sélectionne un article et appuie sur le bouton, puis j'essaie d'obtenir de la valeur et j'obtiens toujours le premier. – JNM

0

Créez une fonction dans laquelle vous liez la liste déroulante. Appelez cette fonction chaque fois que la page se charge (dans l'événement page_load), mais avant de l'appeler, effacez d'abord la source de données dropdownlist existante.

+0

Je viens d'essayer ça et ça ne marche pas. J'obtiens le même résultat. – JNM

+0

pouvez-vous partager votre code codehind aussi? –

Questions connexes