2011-07-03 7 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 개의 열이 있습니다. 첫 번째 열에는 하이퍼 링크가있는 이미지가 있고 두 번째 열에는 사용자 의견 (레이블)이 있습니다.

코드를 작성하는 것이 맞습니까? 또는 내가 원하는 것을 얻을 수있는 더 좋은 방법이 있습니다.

+0

gridview와 목록의 크기가 다르면 어떻게됩니까? –

+0

왜 같은 크기가되어야합니까 ..? 나는 페이징을 허용했다. 나머지 행들이 다음 페이지로 유출되지 않아야 하는가? – WithFlyingColors

+0

GridView에 40 행 **이 있고 목록에 ** 41 항목이 포함되어있는 경우 ** GridView1.Rows [41]에서 foreach 루프가 중단됩니다. –

답변

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> 

당신은 이미지 및 하이퍼 링크 위에서 볼 수 있듯이

그들이있는 gridview 내에서 하나 개의 셀 내에서 표시됩니다 의미 ItemTempate 내 상표입니다.

+0

그래, 그렇긴하지만 ... 그리드보기에서 어떤 속성을 제어할지 .. 어떻게 알 수 있겠 니? 예를 들어 두 번째 셀에 주석 속성을 넣는 것을 안다면 ... Jethro ,, 미안. 당신의 솔루션은 작동하지 않습니다. – WithFlyingColors

+0

@WithFlyingColors, GridView를 만들 때, 열을 지정할 수 있습니다. 즉 첫 번째 열에 이미지가 있고 두 번째 열에 하이퍼 링크가 있고 세 번째 열에 레이블이 있습니다. 그런 다음 데이터 소스가 바인딩 될 때 특정 속성을 바인딩합니다. 예를 들어 데이터 소스가 바인딩 될 때 imageUrl을 설정합니다. – Jethro

+0

다시 말하지만, gridview는 어떤 셀에 어떤 컨트롤을 넣어야하는지 알 수 있습니다. Gridview 행당 2 개의 셀을 사용합니다. – WithFlyingColors

관련 문제