2009-08-03 7 views
1

Je voudrais ajouter dynamiquement une matrice d'images à chaque ligne d'un GridView. Supposons que je voulais un 5 x 5 matrice de la même image par ligne, et le chemin est:ASP.NET: ajouter dynamiquement une matrice d'images à chaque ligne d'un Gridview

public static string PASS = "./Images/pass.png"; 

Supposons aussi que c'est un GridView dans un Gridview (je ne sais pas si la Gridview intérieure est le droit de contrôle à utiliser):

<asp:GridView ID="GridView1" runat="server"> 
     <Columns> 
      <asp:TemplateField> 
       <asp:ItemTemplate> 
        <asp:GridView ID="GridView2" runat="server"> 
        </asp:GridView> 
       </asp:ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

Comment puis-je ajouter dynamiquement chaque matrice à chaque ligne?

EDIT:

Ok, voici une première tentative en utilisant la réponse de Steve, et après vaguement http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datalist.items.aspx comme modèle. Je suis confus sur la façon d'ajouter dynamiquement une DataList dans un GridView, ainsi que comment (et quand) faire la liaison de données.

protected void Page_Load(object sender, EventArgs e) 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("DataList", typeof(DataList)); 

     for (int i = 0; i < 4; i++) 
     { 
      DataRow dr = table.NewRow(); 
      DataList1.DataSource = CreateDataSource(); 
      DataList1.DataBind(); 
      table.Rows.Add(dr); 
     } 
     GridView1.DataSource = table; 
     GridView1.DataBind(); 

    } 

    ICollection CreateDataSource() 
    { 
     string imageLocation = "./Images/311.jpg"; 
     DataTable dt = new DataTable(); 
     DataRow dr; 

     dt.Columns.Add(new DataColumn("ImageURL", typeof(string))); 

     for (int i = 0; i < 25; i++) 
     { 
      dr = dt.NewRow(); 
      dr[0] = imageLocation; 
      dt.Rows.Add(dr); 
     } 

     DataView dv = new DataView(dt); 
     return dv; 
    } 

<form id="form1" runat="server"> 
<div> 
    <asp:GridView ID="GridView1" runat="server"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:DataList ID="DataList1" RepeatColumns="5" runat="server"> 
         <ItemTemplate>  
          <img src="<%# DataBinder.Eval(Container.DataItem, "ImageURL") %> />  
         </ItemTemplate> 
        </asp:DataList> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

</div> 
</form> 

L'exception particulière que je reçois est:

La source de données pour GridView avec id « GridView1 » n'a pas eu des propriétés ou des attributs dont pour générer des colonnes. Assurez-vous que votre source de données contient du contenu.

Où est-ce que je me trompe?

Répondre

1

Pourquoi ne pas utiliser un datalist? Créez une liste de chaînes de collection générique, ajoutez 25 "./Images/pass.png" et liez-la au datalist.

Dans le modèle d'élément, vous avez ceci:

Modifier (changé eval pour conteneur)

<asp:DataList ID="DataList1" RepeatColumns="5" runat="server"> 
    <ItemTemplate> 
     <img src="<%# Container.DataItem %>" /> 
    </ItemTemplate> 
</asp:DataList> 

Il y a probablement un moyen plus rapide pour obtenir 25 occurrences de la chaîne dans la collection ou mieux façon de le représenter, mais je ne peux pas penser à un maintenant.

0

Est-ce que ça doit être un gridview? Pourquoi ne peut-il pas être un asp: table?

1
Protected void Page_Load(object sender, EventArgs e) 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("DataList", typeof(DataList)); 
     DataRow dr = table.NewRow(); 
     table.Rows.Add(dr); 
     GridView1.DataSource = table; 
     GridView1.DataBind(); 

    } 

    ICollection CreateDataSource() 
    { 
     string imageLocation = "~/text.jpg"; 
     DataTable dt = new DataTable(); 
     DataRow dr; 

     dt.Columns.Add(new DataColumn("ImageURL", typeof(string))); 

     for (int i = 0; i < 25; i++) 
     { 
      dr = dt.NewRow(); 
      dr[0] = imageLocation; 
      dt.Rows.Add(dr); 
     } 

     DataView dv = new DataView(dt); 
     return dv; 
    } 

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      DataList dataList1 = e.Row.FindControl("DataList1") as DataList; 
      dataList1.DataSource = CreateDataSource(); 
      dataList1.DataBind(); 
     } 
    } 


    <asp:GridView ID="GridView1" runat="server" 
     onrowdatabound="GridView1_RowDataBound" AutoGenerateColumns="false"> 
     <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:DataList ID="DataList1" RepeatColumns="5" runat="server"> 
        <ItemTemplate>  
         <asp:Image ID="img" runat="server" 
          ImageUrl='<%# DataBinder.Eval   
           (Container.DataItem, "ImageURL") %>' /> 
        </ItemTemplate> 
       </asp:DataList> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
Questions connexes