Hello guys,
I want to ask about download & view file function. I have any gridview that get string of file from folder and show in gridview. I want to make download and view the file in browser. I have try this code from this tutorial : https://www.aspsnippets.com/Articles/Download-Files-from-GridView-using-LinkButton-Click-Event-in-ASPNet-using-C-and-VBNet.aspx
but i always get error : System.Web.HttpException: DataBinding: 'MRISO_FileUpload.FileDetails+Details' does not contain a property with the name 'Value'
Please help me to do this.
Below my full aspx code :
<%@ Page Language="VB" AutoEventWireup="false" CodeBehind="FileDetails.aspx.vb" Inherits="MRISO_FileUpload.FileDetails" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>File Details</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="../Style/demo.css" />
<script type="text/javascript">
$(function () {
$('.collapse').on('shown.bs.collapse', function () {
$(this).parent().find(".glyphicon-plus").removeClass("glyphicon-plus").addClass("glyphicon-minus");
}).on('hidden.bs.collapse', function () {
$(this).parent().find(".glyphicon-minus").removeClass("glyphicon-minus").addClass("glyphicon-plus");
});
})
</script>
<script type="text/javascript">
$(document).ready(function () {
var gvFileDetails = $("#gvFileDetails").prepend($("<thead></thead>").append($("#gvFileDetails").find("tr:first"))).DataTable();
var gvFileAcc = $("#gvFileAcc").prepend($("<thead></thead>").append($("#gvFileAcc").find("tr:first"))).DataTable();
var gvFileEng = $("#gvFileEng").prepend($("<thead></thead>").append($("#gvFileEng").find("tr:first"))).DataTable();
var gvFileFin = $("#gvFileFin").prepend($("<thead></thead>").append($("#gvFileFin").find("tr:first"))).DataTable();
var gvFileQHSE = $("#gvFileQHSE").prepend($("<thead></thead>").append($("#gvFileQHSE").find("tr:first"))).DataTable();
$('input[type=search]').on("keyup", function () {
gvFileDetails.column(1).search($(this).val()).draw();
gvFileAcc.column(1).search($(this).val()).draw();
gvFileEng.column(1).search($(this).val()).draw();
gvFileFin.column(1).search($(this).val()).draw();
gvFileQHSE.column(1).search($(this).val()).draw();
var searchTerm = $(this).val();
$(".forHighlight").each(function () {
var searchPattern = new RegExp('(' + searchTerm + ')', 'ig');
$(this).html($(this).text().replace(searchPattern, "<span class = 'highlight'>" + searchTerm + "</span>"));
});
});
});
</script>
<style type="text/css">
body {
font-family: 'Segoe UI';
font-size: 10pt;
}
.highlight {
background-color: yellow;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="container">
<div class="panel-group" id="accordion">
<div class="panel panel-primary">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#menuOne">
<span class="glyphicon glyphicon-minus"></span>
IT Documents
</a>
</h4>
</div>
<div id="menuOne" class="panel-collapse collapse in">
<div class="panel-body">
<div class="table table-responsive">
<asp:GridView ID="gvFileDetails" AutoGenerateColumns="false" CssClass="table table-bordered" AllowPaging="true" PageSize="100" EmptyDataText="No File Uploaded" runat="server">
<Columns>
<asp:TemplateField HeaderText="No" ItemStyle-Width="50px">
<ItemTemplate>
<%#(gvFileDetails.PageSize * gvFileDetails.PageIndex) + gvFileDetails.Rows.Count + 1 %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FileName" HeaderText="File Name" ItemStyle-CssClass="forHighlight" ItemStyle-HorizontalAlign="Left" ItemStyle-Width="50%" />
<asp:BoundField DataField="FileDate" HeaderText="Create Date" />
<asp:BoundField DataField="FileExt" HeaderText="Ext File" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkDownload" Text="Download" CommandArgument='<%# Eval("Value") %>' OnClick="DownloadFile" runat="server"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</div>
</div>
</div>
<div class="panel panel-success">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#menuTwo">
<span class="glyphicon glyphicon-plus"></span>
Accounting Documents
</a>
</h4>
</div>
<div id="menuTwo" class="panel-collapse collapse">
<div class="panel-body">
<div class="table table-responsive">
<asp:GridView ID="gvFileAcc" AutoGenerateColumns="false" CssClass="table table-bordered" AllowPaging="true" PageSize="100" EmptyDataText="No File Uploaded" runat="server">
<Columns>
<asp:TemplateField HeaderText="No" ItemStyle-Width="50px">
<ItemTemplate>
<%#(gvFileAcc.PageSize * gvFileAcc.PageIndex) + gvFileAcc.Rows.Count + 1 %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FileName" HeaderText="File Name" ItemStyle-CssClass="forHighlight" ItemStyle-HorizontalAlign="Left" ItemStyle-Width="50%" />
<asp:BoundField DataField="FileDate" HeaderText="Create Date" />
<asp:BoundField DataField="FileExt" HeaderText="Ext File" />
</Columns>
</asp:GridView>
</div>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#menuThree">
<span class="glyphicon glyphicon-plus"></span>
Engineering Process Documents
</a>
</h4>
</div>
<div id="menuThree" class="panel-collapse collapse">
<div class="panel-body">
<div class="table table-responsive">
<asp:GridView ID="gvFileEng" AutoGenerateColumns="false" CssClass="table table-bordered" AllowPaging="true" PageSize="100" EmptyDataText="No File Uploaded" runat="server">
<Columns>
<asp:TemplateField HeaderText="No" ItemStyle-Width="50px">
<ItemTemplate>
<%#(gvFileEng.PageSize * gvFileEng.PageIndex) + gvFileEng.Rows.Count + 1 %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FileName" HeaderText="File Name" ItemStyle-CssClass="forHighlight" ItemStyle-HorizontalAlign="Left" ItemStyle-Width="50%" />
<asp:BoundField DataField="FileDate" HeaderText="Create Date" />
<asp:BoundField DataField="FileExt" HeaderText="Ext File" />
</Columns>
</asp:GridView>
</div>
</div>
</div>
</div>
<div class="panel panel-warning">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#menuFour">
<span class="glyphicon glyphicon-plus"></span>
Finance Documents
</a>
</h4>
</div>
<div id="menuFour" class="panel-collapse collapse">
<div class="panel-body">
<div class="table table-responsive">
<asp:GridView ID="gvFileFin" AutoGenerateColumns="false" CssClass="table table-bordered" AllowPaging="true" PageSize="100" EmptyDataText="No File Uploaded" runat="server">
<Columns>
<asp:TemplateField HeaderText="No" ItemStyle-Width="50px">
<ItemTemplate>
<%#(gvFileFin.PageSize * gvFileFin.PageIndex) + gvFileFin.Rows.Count + 1 %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FileName" HeaderText="File Name" ItemStyle-CssClass="forHighlight" ItemStyle-HorizontalAlign="Left" ItemStyle-Width="50%" />
<asp:BoundField DataField="FileDate" HeaderText="Create Date" />
<asp:BoundField DataField="FileExt" HeaderText="Ext File" />
</Columns>
</asp:GridView>
</div>
</div>
</div>
</div>
<div class="panel panel-danger">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#menuFive">
<span class="glyphicon glyphicon-plus"></span>
QHSE Documents
</a>
</h4>
</div>
<div id="menuFive" class="panel-collapse collapse">
<div class="panel-body">
<div class="table table-responsive">
<asp:GridView ID="gvFileQHSE" AutoGenerateColumns="false" CssClass="table table-bordered" AllowPaging="true" PageSize="100" EmptyDataText="No File Uploaded" runat="server">
<Columns>
<asp:TemplateField HeaderText="No" ItemStyle-Width="50px">
<ItemTemplate>
<%#(gvFileQHSE.PageSize * gvFileQHSE.PageIndex) + gvFileQHSE.Rows.Count + 1 %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FileName" HeaderText="File Name" ItemStyle-CssClass="forHighlight" ItemStyle-HorizontalAlign="Left" ItemStyle-Width="50%" />
<asp:BoundField DataField="FileDate" HeaderText="Create Date" />
<asp:BoundField DataField="FileExt" HeaderText="Ext File" />
</Columns>
</asp:GridView>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</body>
</html>
Below my aspx.vb code :
Imports System.IO
Imports System.Net
Imports Microsoft.VisualBasic
Public Class FileDetails
Inherits System.Web.UI.Page
Public Class Details
Public Property FileName As String
Public Property FileDate As String
Public Property FilePath As String
Public Property FileExt As String
Public Property FileSize As Long
End Class
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Me.GetDataGrid()
Me.GetDataGridAcc()
Me.GetDataGridEng()
Me.GetDataGridFin()
Me.GetDataGridQHSE()
End If
End Sub
Protected Sub GetDataGrid()
Dim filePaths() As String = Directory.GetFiles("D:\Upload Document Dept\IT\")
Dim files As List(Of Details) = New List(Of Details)
For Each filePath As String In filePaths
Dim fName As String = Path.GetFileNameWithoutExtension(filePath)
Dim fDate As String = File.GetLastWriteTime(filePath).ToString("dd/MM/yyyy HH:mm:ss")
Dim fExt As String = Path.GetExtension(filePath)
files.Add(New Details() With {.FileName = fName, .FileDate = fDate, .FileExt = fExt, .FilePath = filePath})
Next
gvFileDetails.DataSource = files
gvFileDetails.DataBind()
End Sub
Protected Sub GetDataGridAcc()
Dim filePaths() As String = Directory.GetFiles("D:\Upload Document Dept\ACCOUNTING\")
Dim files_1 As List(Of Details) = New List(Of Details)
For Each filePath As String In filePaths
Dim fName As String = Path.GetFileNameWithoutExtension(filePath)
Dim fDate As String = File.GetLastWriteTime(filePath).ToString("dd/MM/yyyy HH:mm:ss")
Dim fExt As String = Path.GetExtension(filePath)
files_1.Add(New Details() With {.FileName = fName, .FileDate = fDate, .FileExt = fExt, .FilePath = filePath})
Next
gvFileAcc.DataSource = files_1
gvFileAcc.DataBind()
End Sub
Protected Sub GetDataGridEng()
Dim filePaths() As String = Directory.GetFiles("D:\Upload Document Dept\ENGINEERING PROJECT\")
Dim files As List(Of Details) = New List(Of Details)
For Each filePath As String In filePaths
Dim fName As String = Path.GetFileNameWithoutExtension(filePath)
Dim fDate As String = File.GetLastWriteTime(filePath).ToString("dd/MM/yyyy HH:mm:ss")
Dim fExt As String = Path.GetExtension(filePath)
files.Add(New Details() With {.FileName = fName, .FileDate = fDate, .FileExt = fExt, .FilePath = filePath})
Next
gvFileEng.DataSource = files
gvFileEng.DataBind()
End Sub
Protected Sub GetDataGridFin()
Dim filePaths() As String = Directory.GetFiles("D:\Upload Document Dept\FINANCE\")
Dim files As List(Of Details) = New List(Of Details)
For Each filePath As String In filePaths
Dim fName As String = Path.GetFileNameWithoutExtension(filePath)
Dim fDate As String = File.GetLastWriteTime(filePath).ToString("dd/MM/yyyy HH:mm:ss")
Dim fExt As String = Path.GetExtension(filePath)
files.Add(New Details() With {.FileName = fName, .FileDate = fDate, .FileExt = fExt, .FilePath = filePath})
Next
gvFileFin.DataSource = files
gvFileFin.DataBind()
End Sub
Protected Sub GetDataGridQHSE()
Dim filePaths() As String = Directory.GetFiles("D:\Upload Document Dept\QHSE\")
Dim files As List(Of Details) = New List(Of Details)
For Each filePath As String In filePaths
Dim fName As String = Path.GetFileNameWithoutExtension(filePath)
Dim fDate As String = File.GetLastWriteTime(filePath).ToString("dd/MM/yyyy HH:mm:ss")
Dim fExt As String = Path.GetExtension(filePath)
files.Add(New Details() With {.FileName = fName, .FileDate = fDate, .FileExt = fExt, .FilePath = filePath})
Next
gvFileQHSE.DataSource = files
gvFileQHSE.DataBind()
End Sub
Protected Sub DownloadFile(ByVal sender As Object, ByVal e As EventArgs)
Dim filePath As String = CType(sender, LinkButton).CommandArgument
Response.ContentType = ContentType
Response.AppendHeader("Content-Disposition", ("attachment; filename=" + Path.GetFileName(filePath)))
Response.WriteFile(filePath)
Response.End()
End Sub
Protected Sub DeleteFile(ByVal sender As Object, ByVal e As EventArgs)
Dim filePath As String = CType(sender, LinkButton).CommandArgument
File.Delete(filePath)
Response.Redirect(Request.Url.AbsoluteUri)
End Sub
Private Sub gvFileDetails_PageIndexChanging(sender As Object, e As GridViewPageEventArgs) Handles gvFileDetails.PageIndexChanging
gvFileDetails.PageIndex = e.NewPageIndex
Me.GetDataGrid()
End Sub
End Class
Please help me guys. Thanks :)