Boa tarde, tenho uma gridview com info de uma BD, a ideia principal é a partir da gridview utilizando link buttons conseguir fazer download ou apagar o ficheiro.
code da gridview:
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource2"
Width="515px" onrowcommand="GridView1_RowCommand"
AutoGenerateColumns="False" DataKeyNames="ID_Doc" >
<Columns>
<asp:TemplateField HeaderText="Nome" SortExpression="nome">
<EditItemTemplate>
<%# Eval("nome") %>
<asp:TextBox ID="TextBox_nome" runat="server" Text='<%# Bind("nome") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label_nome" runat="server" Text='<%# Bind("nome") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="data" HeaderText="Data de inserção"
SortExpression="data" />
<asp:TemplateField HeaderText="Abrir Relatório" SortExpression="abrir">
<ItemTemplate>
<asp:LinkButton ID="Open" runat="server" Text="Abrir" OnClientClick="Open" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Apagar Relatório" SortExpression="apagar">
<ItemTemplate>
<asp:LinkButton ID="Delete" runat="server" Text="Apagar" OnClientClick="Delete" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void Open(object sender, EventArgs e)
{
int rowIndex = Convert.ToInt16(e.CommandArgument);
// Get the physical Path
SqlConnection conn = new SqlConnection(new connectionString().getConnection());
conn.Open();
SqlCommand caminho = new SqlCommand("SELECT path FROM tbl_documentos WHERE nome ='" + (GridView1.Rows[rowIndex].FindControl("Label_nome") as Label).Text + "'", conn);
SqlDataReader reader = caminho.ExecuteReader();
reader.Read();
string filepath = reader.GetString(0);
reader.Close();
//String filepath = "C:\\Documents and Settings\\tporteiro\\My Documents\\Relatorios\\Quest_Seguros_ECSI_2009.pdf";
// Create New instance of FileInfo class to get the properties of the file being downloaded
FileInfo file = new FileInfo(filepath);
// Checking if file exists
if (file.Exists)
{
// Clear the content of the response
Response.ClearContent();
// LINE1: Add the file name and attachment, which will force the open/cancel/save dialog to show, to the header
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
// Add the file size into the response header
Response.AddHeader("Content-Length", file.Length.ToString());
// Set the ContentType
Response.ContentType = ReturnExtension(file.Extension.ToLower());
// Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
Response.TransmitFile(file.FullName);
// End the response
Response.End();
}
}
private string ReturnExtension(string fileExtension)
{
switch (fileExtension)
{
case ".htm":
case ".html":
case ".log":
return "text/HTML";
case ".txt":
return "text/plain";
case ".doc":
return "application/ms-word";
case ".tiff":
case ".tif":
return "image/tiff";
case ".asf":
return "video/x-ms-asf";
case ".avi":
return "video/avi";
case ".zip":
return "application/zip";
case ".xls":
case ".csv":
return "application/vnd.ms-excel";
case ".gif":
return "image/gif";
case ".jpg":
case "jpeg":
return "image/jpeg";
case ".bmp":
return "image/bmp";
case ".wav":
return "audio/wav";
case ".mp3":
return "audio/mpeg3";
case ".mpg":
case "mpeg":
return "video/mpeg";
case ".rtf":
return "application/rtf";
case ".asp":
return "text/asp";
case ".pdf":
return "application/pdf";
case ".fdf":
return "application/vnd.fdf";
case ".ppt":
return "application/mspowerpoint";
case ".dwg":
return "image/vnd.dwg";
case ".msg":
return "application/msoutlook";
case ".xml":
case ".sdxl":
return "application/xml";
case ".xdp":
return "application/vnd.adobe.xdp+xml";
default:
return "application/octet-stream";
}
}
protected void Delete(object sender, EventArgs e)
{
int rowIndex = Convert.ToInt16(e.CommandArgument);
SqlConnection conn = new SqlConnection(new connectionString().getConnection());
conn.Open();
//selecionar o caminho do ficheiro
SqlCommand caminho = new SqlCommand("SELECT path FROM tbl_documentos WHERE nome = '" + (GridView1.Rows[rowIndex].FindControl("Label_nome") as Label).Text + "'", conn);
SqlDataReader reader = caminho.ExecuteReader();
reader.Read();
string filepath = reader.GetString(0);
reader.Close();
//se o ficheiro existir no caminho ele elimina-o
FileInfo fileInfo = new FileInfo(filepath);
if (fileInfo.Exists)
fileInfo.Delete();
//vai apagar a informação correspondente ao ficheiro eliminado
SqlCommand sql = new SqlCommand("DELETE FROM tbl_documentos WHERE nome = '" + (GridView1.Rows[rowIndex].FindControl("Label_nome") as Label).Text + "'", conn);
sql.ExecuteNonQuery();
conn.Close();
}o problema que tenho até ao momento é não conseguir ir buscar o rowindex para usar na query....alguém me pode ajudar?

ps_: convem dizer que só trabalho com asp.net à uns dias