我想从 GridHyperLinkColumn telerik radgrid table 打开我的 pdf

I will like to open my pdf from GridHyperLinkColumn telerik radgrid table

我需要有关从 GridHyperLinkColumn 打开存储在数据库中的 pdf 文件的帮助,当我单击此列名称时 "DisplayName" 我希望它使用 target = _new 在浏览器上打开我的 pdf 文件。现在我可以使用 verbinary(MAX) 将文件存储在我的 MSSQL table 中,并且还可以在新浏览器中打开 link 但它无法访问 pdf 文件。我的 asp.net 表单源文件如下:

    <ClientSettings AllowDragToGroup="True">
        <Selecting AllowRowSelect="True" />
    </ClientSettings>
    <MasterTableView AutoGenerateColumns="False" DataSourceID="SqlDataSourceGridArchive">
        <Columns>

            <telerik:GridHyperLinkColumn DataTextField="DisplayName" FilterControlAltText="Filter DisplayName column" HeaderText="DisplayName" DataNavigateUrlFormatString="DisplayName" DataNavigateUrlFields="DisplayName" SortExpression="DisplayName" Target="_new" UniqueName="DisplayName">
            </telerik:GridHyperLinkColumn>
            <telerik:GridBoundColumn DataField="doc_number" FilterControlAltText="Filter doc_number column" HeaderText="doc_number" SortExpression="doc_number" UniqueName="doc_number">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="doc_classification" FilterControlAltText="Filter doc_classification column" HeaderText="doc_classification" SortExpression="doc_classification" UniqueName="doc_classification">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="doc_date" DataType="System.DateTime" FilterControlAltText="Filter doc_date column" HeaderText="doc_date" SortExpression="doc_date" UniqueName="doc_date">
            </telerik:GridBoundColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>
<asp:SqlDataSource ID="SqlDataSourceGridArchive" runat="server" ConnectionString="<%$ ConnectionStrings:pro_dbConnectionString %>" SelectCommand="SELECT [DisplayName], [doc_number], [doc_classification], [doc_date] FROM [Document]"></asp:SqlDataSource>

.cs源也如下图: public 部分 class 档案:页面 { protected void Page_Load(object sender, EventArgs e) { RadGrid1.ItemCommand += new GridCommandEventHandler(RadGrid1_ItemCommand);

    }

    protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
    {
        //your code

        string sConn = System.Configuration.ConfigurationManager.ConnectionStrings["pro_dbConnectionString"].ToString();
        SqlConnection objConn = new SqlConnection(sConn);
        objConn.Open();
        string sTSQL = "select * from Document";
        SqlCommand objCmd = new SqlCommand(sTSQL, objConn);
        objCmd.CommandType = CommandType.Text;
        SqlDataAdapter ada = new SqlDataAdapter(objCmd);
        DataTable dt = new DataTable();
        ada.Fill(dt);
        objConn.Close();
        objCmd.Dispose();
        //Bind the Data into the html anchor tag which will call the handler with ID  
        if (dt.Rows.Count > 0)
        {
            string tbl = "";
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                tbl += @"<li>  
<a target='_blank' href='DocHandler.ashx?ID=" + dt.Rows[i]["SNo"].ToString();
                tbl += @"' title='";
                tbl += @"' >" + dt.Rows[i]["DisplayName"].ToString();
                tbl += @"</a>  
        </li>";
            }
            Response.Write(tbl);
        }

    }

}

然后我创建了一个扩展名为 .ashx.cs 的句柄来处理我的文件流,如下所示:

public class 文档处理程序:IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {
        //context.Response.ContentType = "text/plain";
        //context.Response.Write("Hello World");

        string id = context.Request.QueryString["ID"].ToString();
        string sConn = System.Configuration.ConfigurationManager.ConnectionStrings["pro_dbConnectionString"].ToString();
        SqlConnection objConn = new SqlConnection(sConn);
        objConn.Open();
        string sTSQL = "select Name_File,Extension,ContentType,FileData,FileSize from Documente where SNo=@ID";
        SqlCommand objCmd = new SqlCommand(sTSQL, objConn);
        objCmd.CommandType = CommandType.Text;
        objCmd.Parameters.AddWithValue("@ID", id);
        SqlDataAdapter ada = new SqlDataAdapter(objCmd);
        DataTable file = new DataTable();
        ada.Fill(file);
        objConn.Close();
        objCmd.Dispose();
        if (file.Rows.Count > 0)
        {
            DataRow row = file.Rows[0];
            string name = (string)row["Name_File"];
            string contentType = (string)row["ContentType"];
            Byte[] data = (Byte[])row["FileData"];
            int FileSize = Convert.ToInt32(row["FileSize"].ToString());
            // Send the file to the browser  
            context.Response.AddHeader("Content-type", contentType);
            context.Response.AddHeader("Content-   Disposition", "attachment; filename=" + name);
            context.Response.OutputStream.Write(data, 0, FileSize);
            context.Response.Flush();
            context.Response.End();
        }

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

但我无法在我的 radgrid table 上访问它,但我可以在一个简单的网络表单上填充它,我需要这方面的帮助,以便当我单击 hyperlink 它时加载我的 pdf 文件

谢谢

如果要修改网格列中的控件,请使用 ItemDataBound 事件。此外,请参阅此处以获取有关如何访问具体 cell/column 的示例:http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/rows/accessing-cells-and-rows - 您将看到您需要更改控件属性而不是使用 Response.Write()。

然后,使用应该使用的格式字符串,请参阅此处http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/columns/column-types#gridhyperlinkcolumn

如果每个网格行需要多个链接,则应使用模板列并以与当前方法类似的方式创建列表,但 ItemCommand 中的代码应位于 ITemplate class (InstantiateIn 方法),你应该再次在容器中创建 controls/set 一个 HTML 字符串而不是用户 Response.Write.