2013-08-19 2 views
1

Мой жерех разметки выглядит следующим образом:Как использовать datalist в asp.net C#?

 <asp:DataList ID="dtlist" runat="server" RepeatColumns="3" CellPadding="5" OnItemDataBound="dtlist_DataBound"> 
     <ItemTemplate> 
      <asp:Image Width="150" ID="Image1" ImageUrl='<%# Container.DataItem %>' runat="server" /> 
      <br /> 
      <asp:HyperLink ID="HyperLink12" Text='<%# Container.DataItem %>' NavigateUrl='<%# Container.DataItem %>' runat="server"/>            
     </ItemTemplate> 
    </asp:DataList> 

Мой C# код выглядит следующим образом:

 protected void dtlist_DataBound(object sender, DataListItemEventArgs e) 
    { 
     string albumName = Context.Request.QueryString["Album"]; 
     try 
     { 
      DirectoryInfo dir = new DirectoryInfo(MapPath(string.Format("Images/{0}", albumName))); 
      FileInfo[] files = dir.GetFiles(); 

      foreach (FileInfo info in files) 
      { 
       ((Image)e.Item.FindControl("Image1")).ImageUrl = string.Format("~/Images/{0}/{1}", albumName, info.Name); 
       ((HyperLink)e.Item.FindControl("HyperLink12")).Text = info.Name; 
       ((HyperLink)e.Item.FindControl("HyperLink12")).NavigateUrl = string.Format("~/Images/{0}/{1}", albumName, info.Name);  
      } 
     } 
     catch (Exception ex) 
     { 

      throw; 
     } 
    } 

Я хочу, чтобы отобразить изображения из определенной папки (альбома) хранится в дисководе. Когда пользователь нажмет альбом 1, будут показаны все изображения из альбома1. Напр. если в альбоме 1 содержится 10 изображений, тогда 10 изображений должны отображаться в datalist. Но из моего приведенного выше кода на всех 10 изображениях отображается только последнее изображение. Есть ли способ изменить приведенный выше код для отображения 10 отдельных изображений?

ответ

1

Здесь нет необходимости в привязке данных к деталям, вы можете изменить свою разметку следующим образом:

<asp:DataList ID="dtlist" runat="server" RepeatColumns="3" CellPadding="5"> 
    <ItemTemplate> 
     <asp:Image Width="150" ID="Image1" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Image") %>' runat="server" /> 
     <br /> 
     <asp:HyperLink ID="HyperLink12" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "Image") %>' runat="server"/>            
    </ItemTemplate> 
</asp:DataList> 

И в вашей странице загрузки, вы можете выбрать новый список анонимного типа с именами свойств вы желаете (как указано в разметке, как <% # DataBinder.Eval (Container.DataItem, "Имя «)%>:

string albumName = Context.Request.QueryString["Album"]; 
    try 
    { 
     DirectoryInfo dir = new DirectoryInfo(MapPath(string.Format("Images/{0}", albumName))); 

     var dataToBeBound = dir.GetFiles().Select(x => new 
     { 
      Name = x.Name, 
      Image = string.Format("~/Images/{0}/{1}", albumName, x.Name) 

     }).ToList(); 
     dtlist.DataSource = dataToBeBound; 
     dtList.DataBind(); 
    } 
    catch (Exception ex) 
    { 

     throw; 
    } 
+0

dir.GetFiles() Выберите, в этой строке, это дает ошибку, говоря System.Array не содержит определение для Select – nightfire001

+2

добавьте System.Linq имен в файле .cs.. –