Hi, i want to provide a upload function for user in Grid edit mode and then provide a download link in grid view.
the attachment file will save in another table (different linqdatasource with grid), how can i databind the download link ? (will use "UserID" as key in both table)
moreover, my upload function not works, it cannot save the bindary file to the table. please help.
Code behind:
the attachment file will save in another table (different linqdatasource with grid), how can i databind the download link ? (will use "UserID" as key in both table)
moreover, my upload function not works, it cannot save the bindary file to the table. please help.
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
CellSpacing
=
"0"
DataSourceID
=
"ODS_attendance"
width
=
"1200"
PageSize
=
"15"
GridLines
=
"None"
style
=
"margin-top: 0px"
AllowFilteringByColumn
=
"True"
AllowPaging
=
"True"
AllowSorting
=
"True"
AutoGenerateColumns
=
"False"
ShowStatusBar
=
"True"
AllowAutomaticDeletes
=
"false"
AllowAutomaticInserts
=
"false"
AllowAutomaticUpdates
=
"True"
>
<
GroupingSettings
CaseSensitive
=
"false"
/>
<
MasterTableView
AutoGenerateColumns
=
"False"
DataKeyNames
=
"UserID"
DataSourceID
=
"ODS_attendance"
AllowFilteringByColumn
=
"False"
AllowPaging
=
"False"
CommandItemDisplay
=
"Top"
OverrideDataSourceControlSorting
=
"true"
>
<
CommandItemSettings
ExportToPdfText
=
"Export to PDF"
ShowAddNewRecordButton
=
"false"
/>
<
RowIndicatorColumn
FilterControlAltText
=
"Filter RowIndicator column"
Visible
=
"True"
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
FilterControlAltText
=
"Filter ExpandColumn column"
Visible
=
"True"
>
</
ExpandCollapseColumn
>
<
Columns
>
<
telerik:GridEditCommandColumn
UniqueName
=
"EditCommandColumn"
HeaderStyle-Width
=
"50"
>
</
telerik:GridEditCommandColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"UserID"
DataField
=
"UserID"
HeaderText
=
"UserID"
ReadOnly
=
"True"
HeaderStyle-Width
=
"5%"
Visible
=
"false"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Employee_No"
DataType
=
"System.String"
FilterControlAltText
=
"Filter Employee column"
HeaderText
=
"Employee No"
ReadOnly
=
"True"
SortExpression
=
"Employee_No"
UniqueName
=
"Employee_No"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Employee_Display_Name"
DataType
=
"System.String"
FilterControlAltText
=
"Filter Employee column"
HeaderText
=
"Employee"
ReadOnly
=
"True"
SortExpression
=
"Employee_Display_Name"
UniqueName
=
"Employee_Display_Name"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Department"
DataType
=
"System.String"
FilterControlAltText
=
"Filter Department column"
HeaderText
=
"Reporting office"
ReadOnly
=
"True"
SortExpression
=
"Department"
UniqueName
=
"Department"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Start_Time"
FilterControlAltText
=
"Filter Start Time column"
HeaderText
=
"Start Date"
SortExpression
=
"Start_Time"
UniqueName
=
"Start_Date"
DataFormatString
=
"{0: dd-MMM-yyyy}"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"End_Time"
FilterControlAltText
=
"Filter End Time column"
HeaderText
=
"End Date"
SortExpression
=
"End_Time"
UniqueName
=
"End_Date"
DataFormatString
=
"{0: dd-MMM-yyyy}"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Start_Time"
FilterControlAltText
=
"Filter Start Time column"
HeaderText
=
"Start Time"
SortExpression
=
"Start_Time"
UniqueName
=
"Start_Time"
DataFormatString
=
"{0: hh:mm tt}"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"End_Time"
FilterControlAltText
=
"Filter End Time column"
HeaderText
=
"End Time"
SortExpression
=
"End_Time"
UniqueName
=
"End_Time"
DataFormatString
=
"{0: hh:mm tt}"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"TotalDays"
FilterControlAltText
=
"Filter TotalDays column"
HeaderText
=
"Total Day"
SortExpression
=
"TotalDays"
UniqueName
=
"TotalDays"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"TotalHours"
FilterControlAltText
=
"Filter TotalDTotalHoursays column"
HeaderText
=
"Total Hour"
SortExpression
=
"TotalHours"
UniqueName
=
"TotalHours"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Type"
FilterControlAltText
=
"Filter Type column"
HeaderText
=
"Type"
SortExpression
=
"Type"
UniqueName
=
"Type"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"pre_test_score"
FilterControlAltText
=
"Filter pre_test_score column"
HeaderText
=
"Pre test score"
SortExpression
=
"pre_test_score"
UniqueName
=
"pre_test_score"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"post_test_score"
FilterControlAltText
=
"Filter post_test_score column"
HeaderText
=
"Post test score"
SortExpression
=
"post_test_score"
UniqueName
=
"post_test_score"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Result"
FilterControlAltText
=
"Filter Result column"
HeaderText
=
"Result"
SortExpression
=
"Result"
UniqueName
=
"Result"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Cost"
FilterControlAltText
=
"Filter Cost column"
HeaderText
=
"Cost"
SortExpression
=
"Cost"
UniqueName
=
"Cost"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Remarks"
FilterControlAltText
=
"Filter Remarks column"
HeaderText
=
"Remarks"
SortExpression
=
"Remarks"
UniqueName
=
"Remarks"
AllowFiltering
=
"true"
AllowSorting
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
>
<
ItemTemplate
>
<
asp:LinkButton
ID
=
"DownloadButton"
runat
=
"server"
CommandName
=
"DownloadAttachment"
Text
=
"Download"
>
</
asp:LinkButton
>
</
ItemTemplate
>
<
EditItemTemplate
>
<
telerik:RadUpload
ID
=
"AttachmentUpload"
runat
=
"server"
>
</
telerik:RadUpload
>
</
EditItemTemplate
>
</
telerik:GridTemplateColumn
>
</
Columns
>
<
EditFormSettings
EditFormType
=
"Template"
>
<
EditColumn
FilterControlAltText
=
"Filter EditCommandColumn1 column"
UniqueName
=
"EditCommandColumn1"
>
</
EditColumn
>
<
FormTemplate
>
<
table
id
=
"Table2"
cellspacing
=
"2"
cellpadding
=
"1"
width
=
"50%"
border
=
"1"
rules
=
"none"
style
=
"border-collapse: collapse;"
>
<
tr
class
=
"EditFormHeader"
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label3"
Text
=
"Employee No"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:label
ID
=
"tb_emp_no"
runat
=
"server"
Text='<%# Bind("Employee_No") %>' ReadOnly="true"></
asp:label
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label2"
Text
=
"Employee Name"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:label
ID
=
"Label4"
runat
=
"server"
Text='<%# Bind("Employee_Display_Name") %>' ReadOnly="true"></
asp:label
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label9"
Text
=
"Reporting office"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:label
ID
=
"Label10"
runat
=
"server"
Text='<%# Bind("Department") %>' ReadOnly="true"></
asp:label
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label5"
Text
=
"Start Date & Time"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:label
ID
=
"Label6"
runat
=
"server"
Text='<%# Bind("Start_Time","{0: dd-MMM-yyyy hh:mm tt}") %>' ReadOnly="true"></
asp:label
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label7"
Text
=
"End Date & Time"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:label
ID
=
"Label8"
runat
=
"server"
Text='<%# Bind("End_Time","{0: dd-MMM-yyyy hh:mm tt}") %>' ReadOnly="true"></
asp:label
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label19"
Text
=
"Total Days"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:label
ID
=
"Label20"
runat
=
"server"
Text='<%# Bind("TotalDays") %>' ReadOnly="true"></
asp:label
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label21"
Text
=
"Total Hours"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:label
ID
=
"Label22"
runat
=
"server"
Text='<%# Bind("TotalHours") %>' ReadOnly="true"></
asp:label
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label11"
Text
=
"Training Type"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:label
ID
=
"Label12"
runat
=
"server"
Text='<%# Bind("type") %>' ReadOnly="true"></
asp:label
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label13"
Text
=
"Pre test score"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:textbox
ID
=
"tb_pre_test_score"
runat
=
"server"
Text='<%# Bind("pre_test_score") %>' ></
asp:textbox
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label15"
Text
=
"Post test score"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:textbox
ID
=
"tb_post_test_score"
runat
=
"server"
Text='<%# Bind("post_test_score") %>' ></
asp:textbox
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label18"
Text
=
"Result"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:DropDownList
runat
=
"Server"
SelectedValue='<%# Bind("Result") %>'
DataTextField="Result" DataValueField="Result"
ID="comboResult">
<
asp:ListItem
Text
=
""
Value
=
""
></
asp:ListItem
>
<
asp:ListItem
Text
=
"Pass"
Value
=
"Pass"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"Fail"
Value
=
"Fail"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"Defer"
Value
=
"Defer"
></
asp:ListItem
>
</
asp:DropDownList
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label16"
Text
=
"Cost"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:textbox
ID
=
"tb_cost"
runat
=
"server"
Text='<%# Bind("cost") %>' ></
asp:textbox
>
</
td
>
</
tr
>
<
tr
>
<
td
style
=
"width:150px"
>
<
asp:Label
ID
=
"Label17"
Text
=
"Remarks"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
asp:textbox
ID
=
"tb_remarks"
runat
=
"server"
Text='<%# Bind("remarks") %>' ></
asp:textbox
>
</
td
>
</
tr
>
<
tr
>
<
td
>
<
asp:Label
ID
=
"Label14"
Text
=
"Certificate"
runat
=
"server"
></
asp:Label
>
</
td
>
<
td
>
<
telerik:RadUpload
ID
=
"AttachmentUpload"
runat
=
"server"
>
</
telerik:RadUpload
>
</
td
>
</
tr
>
<
tr
>
<
td
align
=
"right"
colspan
=
"2"
>
<
asp:Button
ID
=
"Button1"
Text
=
"Update"
runat
=
"server"
CommandName
=
"Update"
></
asp:Button
>
<
asp:Button
ID
=
"btnDelete"
Text
=
"Delete"
runat
=
"server"
CausesValidation
=
"False"
CommandName
=
"Delete"
OnClientClick
=
"return conformbox();"
visible
=
"false"
></
asp:Button
>
<
asp:Button
ID
=
"btnCancel"
Text
=
"Cancel"
runat
=
"server"
CausesValidation
=
"False"
CommandName
=
"Cancel"
></
asp:Button
>
</
td
>
</
tr
>
</
table
>
</
FormTemplate
>
</
EditFormSettings
>
<
PagerStyle
PageSizeControlType
=
"RadComboBox"
/>
</
MasterTableView
>
<
PagerStyle
PageSizeControlType
=
"RadComboBox"
/>
<
FilterMenu
EnableImageSprites
=
"False"
>
</
FilterMenu
>
</
telerik:RadGrid
>
<
asp:ObjectDataSource
ID
=
"ODS_attendance"
runat
=
"server"
SelectMethod
=
"GetTrainingRecordsArrayBySessionID"
TypeName
=
"LRDB"
>
<
SelectParameters
>
<
asp:QueryStringParameter
Name
=
"id"
QueryStringField
=
"SessionID"
Type
=
"Int32"
/>
</
SelectParameters
>
<
UpdateParameters
>
<
asp:Parameter
Name
=
"UserID"
Type
=
"Int16"
></
asp:Parameter
>
<
asp:Parameter
Name
=
"Remarks"
Type
=
"String"
/>
<%--<
asp:Parameter
Name
=
"Status"
Type
=
"Boolean"
/>--%>
</
UpdateParameters
>
</
asp:ObjectDataSource
>
<
asp:LinqDataSource
ID
=
"LDS_Certificate"
runat
=
"server"
TableName
=
"db_Certificates"
ContextTypeName
=
"dcLRDBDataContext"
EntityTypeName
=
""
Where
=
"UserID==@UserID"
>
<
SelectParameters
>
<
asp:Parameter
Name
=
"UserID"
Type
=
"Int32"
></
asp:Parameter
>
</
SelectParameters
>
</
asp:LinqDataSource
>
Code behind:
Protected Sub RadGrid1_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles RadGrid1.ItemCommand
RadGrid1.MasterTableView.ClearEditItems()
If e.CommandName = RadGrid.InitInsertCommandName Then 'Click Add New Record button
Dim editColumn As GridEditCommandColumn = CType(RadGrid1.MasterTableView.GetColumn("EditCommandColumn"), GridEditCommandColumn)
editColumn.Visible = False
ElseIf (e.CommandName = RadGrid.RebindGridCommandName AndAlso e.Item.OwnerTableView.IsItemInserted) Then
e.Canceled = True
Else
Dim editColumn As GridEditCommandColumn = CType(RadGrid1.MasterTableView.GetColumn("EditCommandColumn"), GridEditCommandColumn)
If Not editColumn.Visible Then 'Click Cancel button (both Insert and Update mode)
editColumn.Visible = True
End If
Dim txt_pre_test_score As TextBox = DirectCast(e.Item.FindControl("tb_pre_test_score"), TextBox)
Dim txt_post_test_score As TextBox = DirectCast(e.Item.FindControl("tb_post_test_score"), TextBox)
Dim txt_cost As TextBox = DirectCast(e.Item.FindControl("tb_cost"), TextBox)
Dim txt_remarks As TextBox = DirectCast(e.Item.FindControl("tb_remarks"), TextBox)
Dim cmb_Result As DropDownList = DirectCast(e.Item.FindControl("comboResult"), DropDownList)
Dim dc As New dcLRDBDataContext
If e.CommandName = "PerformInsert" Then
ElseIf e.CommandName = "Update" Then
Dim lid As Integer = e.Item.OwnerTableView.DataKeyValues(e.Item.ItemIndex)("UserID")
HttpContext.Current.Session("EditUserID") = lid
Dim rec = (From p In dc.db_Training_Records Where p.UserID = lid).FirstOrDefault
If Not rec Is Nothing Then
rec.Cost = txt_cost.Text
rec.pre_test_score = txt_pre_test_score.Text
rec.post_test_score = txt_post_test_score.Text
rec.Remarks = txt_remarks.Text
rec.Result = cmb_Result.SelectedValue
rec.LastUpdateBy = HttpContext.Current.Session("UserID")
rec.LastUpdateDate = DateTime.Now
dc.SubmitChanges()
End If
Dim attachmentUpload As RadUpload = DirectCast(e.Item.FindControl("AttachmentUpload"), RadUpload)
If attachmentUpload.UploadedFiles.Count > 0 Then
Dim file As UploadedFile = attachmentUpload.UploadedFiles(0)
Dim stream As System.IO.Stream = file.InputStream
Dim binaryData As Byte() = New Byte(stream.Length - 1) {}
stream.Read(binaryData, 0, CInt(stream.Length))
'binaryData contains your uploaded content
'you can save to your database
stream.Seek(0, System.IO.SeekOrigin.Begin)
Dim newRecord1 As New db_Certificate
dc.db_Certificates.InsertOnSubmit(newRecord1)
newRecord1.BinaryData = binaryData
newRecord1.FileName = file.FileName
newRecord1.FileSize = file.ContentLength / 1024
newRecord1.Description = file.GetFieldValue("Description")
newRecord1.UploadBy = HttpContext.Current.Session("UserID")
newRecord1.UploadDate = DateTime.Now
newRecord1.LastUpdatedOn = DateTime.Now
newRecord1.LastUpdatedBy = HttpContext.Current.Session("UserID")
newRecord1.UserID = lid
dc.SubmitChanges()
End If
RadGrid1.MasterTableView.ClearEditItems()
RadGrid1.DataBind()
End If
dc.Dispose()
End If
End Sub