各位大侠,小弟已将文件上传到文件夹upload内,同时将文件名称作为路径保存到数据库字段path内。现在需要实现如下功能,利用datalist控件将数据库中的最新5条拉到网站首页显示,用户点击文件名即可直接下载。曾经利用gridview控件做过相关功能,代码如下:   <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSourceDownLoad" >
    <Columns>
      <asp:BoundField DataField="LuJing" HeaderText="文件下载" SortExpression="LuJing" />
                        
      <asp:HyperLinkField DataNavigateUrlFields="LuJing" DataNavigateUrlFormatString="~/upload/{0}" Target="_blank" Text="下载" />                         
    </Columns>
   </asp:GridView>      <asp:SqlDataSource ID="SqlDataSourceDownLoad" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
             SelectCommand="SELECT top 5 [LuJing], [ID] FROM [UpLoad] ORDER BY [ID] DESC">
      </asp:SqlDataSource>       这样显示效果是显示一个表的两列,第一列是文件名称列表,第二列是一个“下载”按钮,点击“下载”按钮则可直接下载。
       
        但现在为了追求首页界面的统一,需要在datalist里面做,同时不能利用下载按钮,而是点击文件名称本身直接下载。        还请各位大侠指教。最好能给出源码,而不只是思路提示。

解决方案 »

  1.   

    做成一个Hyperlink也可以下载了吧!另外,做下载的,不防参考:
    http://blog.csdn.net/insus/archive/2008/03/30/2229863.aspx
      

  2.   

    下面是我自己的音乐网站的部分代码,也是使用DataList,需要全部可以发我邮件[email protected]
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Text.RegularExpressions;namespace Music
    {
        public partial class SongList : System.Web.UI.UserControl
        {
          protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    MusicDb musicDb = new MusicDb();
                    dlSong.DataSource = musicDb.GetSongsList(Type.ToString());
                    dlSong.DataBind();                foreach (DataListItem item in dlSong.Items)
                    {
                        int songId = 0;
                        int albumId = 0;
                        int singerId = 0;
                        string songPath = String.Empty;
                        string singerName = String.Empty;
                        string albumName = String.Empty;
                        string disCompany = String.Empty;
                        string ftpDir = String.Empty;                    HyperLink hlSong = (HyperLink)item.FindControl("dlHlSong");
                        songId = Int32.Parse(hlSong.NavigateUrl.ToString());
                        hlSong.NavigateUrl = SongPageUrl + "?songId=" + songId.ToString();
                        hlSong.Target = "_blank";
                        hlSong.ToolTip = hlSong.Text;
                        hlSong.Text = SfString.GetSubstring(hlSong.Text, 6);                    HyperLink hlPlay = (HyperLink)item.FindControl("dlHlPlay");
                        hlPlay.ToolTip = "已点播" + musicDb.GetSongInfo(songId).Rows[0]["Count"].ToString() + "次";
                        hlPlay.ImageUrl = PlayImageUrl;
                        hlPlay.NavigateUrl = SongPageUrl + "?songId=" + songId.ToString();
                        hlPlay.Target = "_blank";
                        //读取专辑和歌手Id
                        try
                        {
                            songPath = musicDb.GetSongInfo(songId).Rows[0]["Path"].ToString();
                            albumId = Int32.Parse(musicDb.GetSongInfo(songId).Rows[0]["AlbumId"].ToString());
                            singerId = Int32.Parse(musicDb.GetSongInfo(songId).Rows[0]["SingerId"].ToString());
                        }
                        catch (Exception ex)
                        {
                            Response.Write(ex.Message);
                            return;
                        }
                        //歌手
                        try
                        {
                            singerName = musicDb.GetSingerInfo(singerId).Rows[0]["Name"].ToString();
                            ftpDir = musicDb.GetSingerInfo(singerId).Rows[0]["FtpDir"].ToString();
                        }
                        catch (Exception ex)
                        {
                            Response.Write(ex.Message);
                            return;
                        }
                        HyperLink hlSinger = (HyperLink)item.FindControl("dlHlSinger");
                        hlSinger.Text = singerName;
                        hlSinger.ToolTip = hlSinger.Text;
                        hlSinger.NavigateUrl = SingerPageUrl + "?singerId=" + singerId.ToString();
                        hlSinger.Target = "_blank";
                        hlSinger.Text = SfString.GetSubstring(hlSinger.Text, 6);
                        //专辑
                        try
                        {
                            albumName = musicDb.GetAlbumInfo(albumId).Rows[0]["Name"].ToString();
                            disCompany = musicDb.GetAlbumInfo(albumId).Rows[0]["DiscCompany"].ToString();
                        }
                        catch (Exception ex)
                        {
                            Response.Write(ex.Message);
                            return;
                        }
                        HyperLink hlAlbum = (HyperLink)item.FindControl("dlHlAlbum");
                        hlAlbum.Text = albumName;
                        hlAlbum.ToolTip = hlAlbum.Text;
                        hlAlbum.NavigateUrl = AlbumPageUrl + "?albumId=" + albumId.ToString();
                        hlAlbum.Target = "_blank";
                        hlAlbum.Text = SfString.GetSubstring(hlAlbum.Text, 6);                    HyperLink hlCompany = (HyperLink)item.FindControl("dlHlCompany");
                        hlCompany.Text = disCompany;
                        hlCompany.ToolTip = hlCompany.Text;
                        hlCompany.Text = SfString.GetSubstring(hlCompany.Text, 6);
                        //下载
                        HyperLink hlDownload = (HyperLink)item.FindControl("dlHlDownload");
                        hlDownload.ImageUrl = DownloadImageUrl;
                        hlDownload.NavigateUrl = IpPrefix + ftpDir + @"/" + songPath;
                    }                imgbtnAll.ImageUrl = ChooseAllImageUrl;
                    imgbtnCancel.ImageUrl = CancelImageUrl;
                    imgbtnPlayAll.ImageUrl = PlayAllImageUrl;
                    imgbtnAll2.ImageUrl = ChooseAllImageUrl;
                    imgbtnCancel2.ImageUrl = CancelImageUrl;
                    imgbtnPlayAll2.ImageUrl = PlayAllImageUrl;
                }
            }        //播放选中歌曲
            private void PlayChosenSongs()
            {
                List<Int32> songsList = new List<Int32>();
                string songs = String.Empty;
                foreach (DataListItem item in dlSong.Items)
                {
                    try
                    {
                        HyperLink hlSong = (HyperLink)item.FindControl("dlHlSong");
                        Regex r = new Regex(@".*?songId=(?<songId>\d+)");
                        int songId = Int32.Parse(r.Match(hlSong.NavigateUrl).Result("${songId}"));                    CheckBox cbChoose = (CheckBox)item.FindControl("dlCbChoose");
                        if (cbChoose.Checked)
                            songsList.Add(songId);
                    }
                    catch (Exception ex)
                    {
                        Response.Write(ex.Message);
                        return;
                    }
                }
                if (songsList.Count == 0)
                {
                    //Response.Write("未选中任何歌曲");
                    return;
                }
                if (songsList.Count == 1)
                {
                    songs = songsList[0].ToString();
                }
                else
                {
                    for (int i = 0; i < songsList.Count - 1; i++)
                    {
                        songs += songsList[i].ToString() + "$";
                    }
                    songs += songsList[songsList.Count - 1].ToString();
                }
                Response.Redirect(SongPageUrl + "?songId=" + songs);
            }        protected void imgbtnPlayAll_Click(object sender, ImageClickEventArgs e)
            {
                PlayChosenSongs();
            }        protected void imgbtnPlayAll2_Click(object sender, ImageClickEventArgs e)
            {
                PlayChosenSongs();
            }        
      

  3.   

        
        protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
        {
            string strFileName = this.DataList1.DataKeys[e.Item.ItemIndex].ToString();
            string FullFileName = Page.Server.MapPath("Upload/") + strFileName;        FileInfo DownloadFile = new FileInfo(FullFileName);
            Response.Clear();
            Response.Charset = "utf-8";
            Response.Buffer = false;
            this.EnableViewState = false;
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.AppendHeader("Content-Disposition","attachment;filename=" + strFileName);
            Response.ContentType = "application/unknown ";
            Response.WriteFile(FullFileName);
            Response.Flush();
            Response.Close();
            Response.End();
        }
      

  4.   

    用linkButton 放文件名,给linkButton加事件,这样就和有个“下载”按钮是一样的效果了