2015-06-30 4 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 шаблона элемента, а затем на code-behind @ 'GridviewRowBond' извлекает значки, разбивает их, добавляет динамический контроль изображения с помощью src и связывает целостный с литеральным управлением. –

+0

Спасибо за респос .. Можете ли вы просто привести пример ..Это поможет мне больше – user2395176

+0

Опубликуйте свой код, Gridview HTML MARKUP n all –

ответ

1

Здесь первый коплю изображение/bagde в скрытом поле, а затем на GridviewRowcommand мы извлекаем значение из скрытого поля, разделить его добавить динамическое управление изображения в панель управления

псевдокод:

HTML Markup :

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

Все, что вам нужно сделать, это бросить DataItem к UserInteractionList классу в системе и получить доступ к соответствующему свойству:

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 с вложенным списком:

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

Если вы можете изменить класс UserInteractionList, вы можете упростить это, добавив новое свойство для разделенных изображений:

public class UserInteractionList 
{ 
    ... 

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

Вы бы затем использовать эту собственность в качестве источника данных вложенного списка:

<asp:ListView runat="server" DataSource='<%# Eval("Images") %>'> 
Смежные вопросы