2009-08-03 6 views
1

Ich möchte dynamisch eine Matrix von Bildern zu jeder Zeile eines GridView hinzufügen. Angenommen, ich wollte eine 5 x 5 Matrix des gleichen Bildes pro Zeile, und der Weg ist: Angenommen,ASP.NET: Hinzufügen einer Matrix von Bildern zu jeder Zeile eines Gridview

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

auch, dass es innerhalb eines Gridview ein Gridview ist (ich bin nicht sicher, ob der innere Gridview die richtige Steuerung ist zu verwenden):

<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> 

Wie kann ich jede Matrix dynamisch zu jeder Zeile hinzufügen?

EDIT:

Ok, hier ist ein erster Versuch, Steve Antwort verwenden und folgenden losen http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datalist.items.aspx als Modell. Ich bin verwirrt darüber, wie man eine DataList innerhalb einer GridView dynamisch hinzufügt, und wie (und wann) man die Datenbindung durchführt.

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> 

Die besondere Ausnahme, die ich bekommen ist:

Die Datenquelle für Gridview mit id ‚GridView1‘ hat keine Eigenschaften oder Attribute, aus denen Spalten zu erzeugen. Stellen Sie sicher, dass Ihre Datenquelle über Inhalte verfügt.

Wohin gehe ich falsch?

Antwort

1

Wie wäre es stattdessen mit einem Datenlogger? Erstellen Sie eine generische Auflistungsliste der Zeichenfolge, fügen Sie 25 "./Images/pass.png" hinzu und binden Sie sie an die Datenliste.

In der Elementvorlage, haben Sie diese:

Edit (geändert eval Container)

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

Wahrscheinlich gibt es einen schnelleren Weg 25 Instanzen der Zeichenfolge in die Sammlung zu erhalten oder besser Art, es darzustellen, aber ich kann jetzt nicht an eins denken.

0

Muss es eine Gridview sein. Warum kann es kein Asp: Tisch sein?

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> 
Verwandte Themen