2015-06-30 65 views
0

我有一個綁定網格的要求。數據表的結構如下面用ImageField綁定網格

enter image description here

我需要與用戶名,nooflikes,徽章網格結合。還有一件事是徽章是一個形象領域,需要用'|'來分隔徽章符號。

這裏第一行需要將徽章分隔爲www.img1和www.img2並綁定爲圖像。

我加入這樣

List<UserInteractionList> TestList = new List<UserInteractionList>(); 
     UserInteractionList test; 

     while (reader.Read()) 
     { 
      test = new UserInteractionList(); 
      test.UserName = reader["UserName"].ToString(); 
      test.Action = reader["nooflikes"].ToString(); 
      test.Image = reader["Badges"].ToString(); 
      TestList.Add(test); 
     } 
dgv1.datasource = testlist; 
dgv1.databind(); 




protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     string images= e.Row.Cells[2].Text; 
     string[] strArray = x.Split('|'); 

     for (int i = 0; i < strArray.Length; i++) 
     { 

      Image photoImageField = new Image(); 
      photoImageField.ImageUrl = strArray[i]; 
      e.Row.Cells[2].Controls.Add(photoImageField); 
     } 

    } 

我已經加入這樣和調試我每次我得到空時發現,GridView1_RowDataBound通過評估string images= e.Row.Cells[2].Text;

請幫我補充這一點。

謝謝!

+0

當你有像正數,所以你必須添加你的GridView項模板下的文字控制,然後在代碼隱藏@ GridviewRowBond獲取徽章,分割它,添加動態圖像控制與src和綁定整個文字控制 –

+0

感謝您的respose ..你可以舉一個例子..這將幫助我更多 – user2395176

+0

發佈您的代碼,Gridview HTML MARKUP n全部 –

回答

1

這裏第一正在保存的圖像/ bagde到一個隱藏字段,然後對GridviewRowcommand我們取從隱藏字段的值,將它的動態圖像控制添加到面板控制

僞代碼:

HTML標記:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound"> 
       <Columns> 
        <asp:TemplateField HeaderText="Col1"> 
         <ItemTemplate> 
          <asp:HiddenField ID="HiddenField1" Value='<%# Bind("Image") %>' runat="server" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Col2"> 
         <ItemTemplate> 
          <asp:Label ID="Label1" runat="server" Text='<%# Bind("UserName ") %>' ></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="col3"> 
         <ItemTemplate> 
          <asp:Panel ID="myPanelContainer" runat="server"></asp:Panel> 

         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      HiddenField hd1 = (HiddenField)e.Row.FindControl("HiddenField1"); 
      Panel pnl = (Panel)e.Row.FindControl("myPanelContainer"); 

      string[] strArray = hd1.Value.Split('|'); 

      for (int i = 0; i < strArray.Length; i++) 
      { 
       Image photoImageField = new Image(); 
       photoImageField.ImageUrl = strArray[i]; 

       pnl.Controls.Add(photoImageField); 
      } 
     } 
    } 

這裏的許多Gridview Related Article

1

RowDataBound情況下,行的DataItem property將被設置爲從與該行被綁定數據源的項目。

在這種情況下,這將是您的UserInteractionList類的一個實例。

所有你需要做的就是投了DataItemUserInteractionList類,並訪問相關屬性:

<asp:TemplateField HeaderText="Images"> 
<ItemTemplate> 
    <asp:ListView runat="server" 
     DataSource='<%# Eval("Image", "{0}").Split(new[] { "|" }) %>' 
    > 
    <ItemTemplate> 
     <asp:Image runat="server" 
      ImageUrl='<%# Container.DataItem %>' 
     /> 
    </ItemTemplate> 
    </asp:ListView> 
</ItemTemplate> 
</asp:TemplateField> 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    var dataItem = (UserInteractionList)e.Row.DataItem; 
    string images = dataItem.Image; 
    string[] strArray = images.Split('|'); 

    for (int i = 0; i < strArray.Length; i++) 
    { 
     Image photoImageField = new Image(); 
     photoImageField.ImageUrl = strArray[i]; 
     e.Row.Cells[2].Controls.Add(photoImageField); 
    } 
} 

您可以通過使用TemplateField與嵌套列表簡化這一

如果您可以修改UserInteractionList類,則可以通過爲分割圖像添加一個新屬性來進一步簡化此操作:

public class UserInteractionList 
{ 
    ... 

    public string[] Images 
    { 
     get { return Image.Split('|'); } 
    } 
} 

你會然後使用該屬性作爲嵌套表的數據源:

<asp:ListView runat="server" DataSource='<%# Eval("Images") %>'>