【问题标题】:How to use datalist in asp.net c#?如何在asp.net c#中使用datalist?
【发布时间】:2013-08-19 13:28:15
【问题描述】:

我的asp标记如下:

       <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 中的所有图像。例如。如果album1 包含10 张图片,则datalist 中应显示10 张图片。但是从我上面的代码中,所有 10 张图片中只显示了最后一张图片。有什么办法可以修改上面的代码,显示10张单独的图片?

【问题讨论】:

    标签: c# asp.net datalist


    【解决方案1】:

    你不应该在这里需要on item databound,你可以像这样改变你的标记;

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

    在您的页面加载中,您可以选择一个新的匿名类型列表,其中包含您想要的属性名称(如标记中所述 Name") %>:

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

    【讨论】:

    • dir.GetFiles().Select,在这一行中,它给出了错误,说 system.array 不包含 Select 的定义。
    • 请在您的 .cs 文件中添加 System.Linq 命名空间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多