2011-07-03 18 views
0

私はオブジェクトのリストを持っています。各オブジェクトには3つのプロパティがあります。リストを反復してgridviewの中に入れたいと思います。コントロールをグリッドビューに動的に配置

public void PutAllObjects in a GridView(List<CommentsObject>commentsData) 
{ 
    int num=0; 
    foreach(var item in commentsData) 
    { 
       Image img=new Image(); 
       img.imageUrl=item.ImageOfUser; 
       Hyperlink hl=new Hyperlink(); 
       hl.Text="<br/>"+item.UsersName; 
       GridView1.Rows[num++].Cells[0].Controls.Add(img); 
       GridView1.Rows[num].Cells[0].Controls.Add(hl); 
       lbl=new Label(); 
       lbl.Text=item.UsersComment 
       GridView1.Rows[num].Cells[1].Controls.Add(lbl); 

    } 

} 

GridView1は40行あります。各行には2列あり、最初の列にはハイパーリンク付きの画像があり、2列目にはユーザーのコメント(ラベル)があります..

私はコードを書いていますか?または私が望むものを達成するための良い方法があります

+0

グリッドビューとリストのサイズが同じでないとどうなりますか? –

+0

なぜ同じサイズにする必要があります..?私はページングを許可しました。残りの行は次のページに流出しませんでしたか? – WithFlyingColors

+0

GridViewに40行**があり、リストに** 41個のアイテムが含まれていると** foreachループが 'GridView1.Rows [41] 'で破損します –

答えて

2

あなたはむしろこのような何かを行う必要があります。

GridView1.DataSource = commentsData; 
GridView1.DataBind(); 

2つの列のみをバインドする場合は、次の操作を行います。

var source = from p in commentsData 
      select new {p.ImageOfUser, "<br/>" + p.UsersName, p.UsersComment }; 
GridView1.DataSource = source; 
GridView1.DataBind(); 

    <asp:GridView ID="gvView" runat="server" AutoGenerateColumns="False"> 
       <Columns> 
        <asp:TemplateField HeaderText="#"> 
         <ItemTemplate> 
          <asp:Image ID="imgName" imageUrl='<%# Bind("ImageOfUser") %>'></asp:Image> 
          <asp:Hyperlink ID="hyperLink" Text='<%# Bind("UsersComment") %>' ></asp:Hyperlink> 
         </ItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="lblMessage" Text='<%# Bind("UsersComment") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
    </asp:GridView> 

あなたは画像やハイパーリンクの上に見ることができるように、彼らはGridViewの内、一つのセル内に表示されますを意味し、ItemTempate以内です。

+0

ええ、私がそれを行うなら、グリッドビューはどのようなプロパティをどのようなコントロールに入れるのかを知っていますか?それは、例えば2番目のセルにコメントプロパティを入れることを知っていますか...ごめんなさいJethro ,,あなたの解決策は動かない – WithFlyingColors

+0

@WithFlyingColors、GridViewを作成するときにOKを指定することができます。つまり、最初の列にはイメージ、2番目の列にはハイパーリンク、3番目の列にはラベルが付いています。次に、データソースがバインドされるときに特定のプロパティをバインドするだけです。たとえば、データソースがバインドされているときにimageUrlを設定します。 – Jethro

+0

もう一度、gridviewはどのセルに何を入れるべきかを知っています。グリッドビューの行あたり2つのセルを使用します – WithFlyingColors

関連する問題