2009-08-03 15 views
1

GridViewの各行に画像のマトリックスを動的に追加したいと思います。ASP.NET:Gridviewの各行に画像のマトリックスを動的に追加する

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

はまた、それは(私は内側のGridViewのが右のコントロールであるかどうかわからないんだけどGridViewの内のGridViewのと仮定:私は、行ごとに同じ画像の5×5の行列を望んでいた、とパスがあるとし使用する):

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

どのように動的に各行を各行に追加できますか?

EDIT:

[OK]を、ここではスティーブの答えを使用して最初の試みだ、と緩くモデルとしてhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datalist.items.aspxを以下に示します。私は、GridView内にDataListを動的に追加する方法と、データバインディングをどのように(そしていつ行う)かについて混乱しています。

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> 

私が手に特定の例外がある:

のGridViewのデータソースIDを持つ「GridView1」の列を生成するから、任意のプロパティまたは属性を持っていませんでした。データソースにコンテンツがあることを確認します。

どこが間違っていますか?

答えて

1

代わりにデータリストを使用するのはどうですか?文字列のジェネリックコレクションリストを作成し、25 "./Images/pass.png"を追加してデータリストにバインドします。項目テンプレートで

、あなたがこれを持っている:

編集(コンテナにevalの変更)

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

速いコレクションに文字列の25個のインスタンスを取得する方法や、より良いおそらくありますそれを表現する方法は、私は今考えていることはできません。

0

グリッドビューである必要がありますか。なぜそれがASPではないのですか:テーブル?

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> 
関連する問題