动态地将控件放入gridview中

时间:2011-07-03 17:02:08

标签: c# asp.net controls

我有一个对象列表,每个对象有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列......第一列有一个带超链接的图像,第二列有用户注释(标签)..

我是否正确地编写代码?或者有更好的方法来实现我想要的东西

1 个答案:

答案 0 :(得分:2)

你应该做这样的事情。

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

如果您只想绑定两列,则可以执行以下操作。

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>

如上所示,Image和Hyperlink都在ItemTempate中,这意味着它们将显示在gridview中的一个单元格内。