我想从 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.
我需要有关从 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.