gridview中的超链接列

本文关键字:超链接 gridview | 更新日期: 2023-09-27 18:14:49

我有一个文件夹,里面有不同类型的文件,如doc, xls, ppt等。我的gridview显示,ID,文件名和类型。我想使文件名列作为超链接。超链接列是否可能同时充当超链接+选定索引?我想说的是,当我点击文件名时,它不应该带我到另一个页面,而是打开我点击的文件?我在gridview中使用了一个命令字段,其中文本为视图,它将该列的所有索引显示为视图。但是现在我不想那样。相反,我希望超链接字段充当该命令字段。这可能吗?

我想要的是,如果gridview看起来像这样如果gridview显示为

Id文件名类型


1 cell doc

2 wood xls

3老虎ppt

我想把cell, wood和tiger显示为超链接,它们不应该带我到另一个页面,相反,它们应该打开文件夹

gridview中的超链接列

中的文件

您可以创建一个自定义处理程序(.ashx)文件,并相应地设置响应头信息。这应该可以处理重定向到另一个页面。

1)注册一个通用的HttpHandler来处理下载(Add> New Item> generic Handler):

Downloads.ashx.cs:

using System;
using System.Web;
namespace FileDownloads
{
    public class Downloads : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            var file = context.Request.QueryString["f"];
            // Assuming all downloadable files are in a folder called "downloads"
            // located at the root of your website/application...
            var path = context.Server.MapPath(
                string.Format("~/downloads/{0}", file)
            );
            var response = context.Response;
            response.ClearContent();
            response.Clear();
            response.AddHeader("Content-Disposition",
                string.Format("attachment; filename={0};", file)
            );
            response.WriteFile(path);
            response.Flush();
            response.End();
        }
        public bool IsReusable
        {
            get { return false; }
        }
    }
}

2)像这样连接GridView:

defalut.aspx:

<asp:gridview id="downloadsGridView" runat="server" autogeneratecolumns="false">
    <columns>
        <asp:hyperlinkfield headertext="File Name"
          datatextfield="Name"
          datanavigateurlfields="Name"
          datanavigateurlformatstring="~/Downloads.ashx?f={0}" />
    </columns>
</asp:gridview>

default.aspx.cs:

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
namespace FileDownloads
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;
            var directory = Server.MapPath("~/downloads/");
            var filePaths = Directory.GetFiles(directory);
            downloadsGridView.DataSource = filePaths.Select(x => new DLFile
            {
                Name = x.Split('''').Last()
            });
            downloadsGridView.DataBind();
        }
        public class DLFile
        {
            public string Name { get; set; }
        }
    }
}

显然,您需要调整上面的示例以满足您的特定需求。通过上面的方法下载文件是一个很好的例子,当你应该使用一个通用的HttpHandler