各位大侠,小弟已将文件上传到文件夹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里面做,同时不能利用下载按钮,而是点击文件名称本身直接下载。 还请各位大侠指教。最好能给出源码,而不只是思路提示。
<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里面做,同时不能利用下载按钮,而是点击文件名称本身直接下载。 还请各位大侠指教。最好能给出源码,而不只是思路提示。
http://blog.csdn.net/insus/archive/2008/03/30/2229863.aspx
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();
}
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();
}