2012-09-08 3 views
0

J'utilise le code suivant pour définir une source de données pour une liste déroulante à l'intérieur de ma grille, mais cela ne fonctionne pas. Liste est une liste de chaînes, qui se lie à une liste déroulante que j'ai en dehors de ma grille. Cependant, le code ci-dessus ne remplit pas le dropsdown dans le gridview.définition de la source de données pour la liste déroulante à l'intérieur de la grille

<asp:GridView ID="GridView1" HorizontalAlign="Center" 
           AutoGenerateColumns="false" CellSpacing="5" CellPadding="5" CssClass="GridView" Font-Size="Small" 
           runat="server" OnRowDataBound = "GridView1_RowDataBound" > 

         <Columns> 


         <asp:BoundField HeaderText="From" DataField="From" /> 

         <asp:BoundField HeaderText="Subject" DataField="Subject" /> 

         <asp:BoundField HeaderText="Received" DataField="Received" /> 





         <asp:TemplateField HeaderText="Attachments" ItemStyle-HorizontalAlign="Center"> 
            <ItemTemplate> 
             <asp:ImageButton runat="server" ID="attach" CommandName="viewattachments" Text="More" 
              ImageUrl="~/images/notes.png" visible='<%# System.Convert.ToBoolean((DataBinder.Eval(Container.DataItem, "Attachments").ToString() == "") ? false : true) %>' /> 


            </ItemTemplate> 
            <ItemStyle HorizontalAlign="Center"></ItemStyle> 
           </asp:TemplateField> 


           <asp:TemplateField HeaderText="Move To" ItemStyle-HorizontalAlign="Center"> 
            <ItemTemplate> 

             <asp:DropDownList ID="folderslist" runat="server"></asp:DropDownList> 

            </ItemTemplate> 
            <ItemStyle HorizontalAlign="Center"></ItemStyle> 
           </asp:TemplateField> 

</Columns> 
          </asp:GridView> 
+0

Pouvez-vous nous montrer où html côté gridview et menu déroulant est? – Adil

Répondre

0

La liste déroulante dans gridview est folders pas folderlist. Donnez des dossiers dans la méthode e.Row.FindControl(). Déboguer le code pourrait vous aider à ce qui se passe. Assurez-vous également que vous avez des données dans la liste.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    DropDownList drop = (DropDownList)e.Row.FindControl("folders"); 
    drop.DataSource = list; 
    drop.DataBind(); 

} 
+0

juste changé que je testais quelque chose. Ils sont nommés correctement. – user541597

+0

Avez-vous débogué le code? – Adil

+0

oui. La référence d'objet n'est pas définie à une instance d'un objet. – user541597

0

asp:DropDownList se fixe aux propriétés d'un élément de source de données et type String ne possède pas une propriété qui retourne sa valeur. Essayez d'envelopper chaque chaîne dans un objet d'aide:

class StringHolder 
{ 
     public StringHolder(string displayText) { DisplayText = displayText; } 
     public string DisplayText { get; set;} 
} 


IList<StringHolder> WrapStrings(IList<string> strings) 
{ 
    return strings.Select(it => new StringHolder(it)).ToList()); 

} 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    DropDownList drop = (DropDownList)e.Row.FindControl("folderslist"); 
    drop.DataTextField = "DisplayText"; 
    drop.DataSource = WrapStrings(list); 
    drop.DataBind(); 
} 
+1

Je reçois une erreur "Référence d'objet non définie sur une instance d'un objet." Dans le drop.DataTextField = "DisplayText"; ligne. – user541597

+0

@ user541597 voir mes dernières modifications – alexm

+0

comment pourrais-je ajouter à la liste? Suis-je en train d'utiliser une liste ou l'avez-vous déjà définie? – user541597

0
private void grdCoboFill() 
{ 
    DataTable dt = new DataTable(); 
    dt.Columns.Add("ColorID", typeof(int)); 
    dt.Columns.Add("ColorName", typeof(String)); 

    dt.Rows.Add(new Object[] { 1, "RED" }); 
    dt.Rows.Add(new Object[] { 2, "GREEN" }); 
    dt.Rows.Add(new Object[] { 3, "BLUE" }); 

    foreach (GridViewRow row in this.GridView1.Rows) 
    { 
     ((DropDownList)row.FindControl("DropDownList1")).DataSource = dt; 
     ((DropDownList)row.FindControl("DropDownList1")).DataValueField = "ColorID"; 
     ((DropDownList)row.FindControl("DropDownList1")).DataTextField = "ColorName"; 
     ((DropDownList)row.FindControl("DropDownList1")).DataBind(); 
    } 
} 
Questions connexes