Hi,
I have a GridAttachmentColumn in my grid which allows user to upload files. Unfortunately, In my Insert and Update routing, I'm ending up with null UploadedFileCollection collection even If user uploads a file. Note that, I don't use allowFileExtension and MaxFileSize properties in my GridAttachmentColumn columns property.
<
telerik:RadGrid
ID
=
"grdFiles"
runat
=
"server"
AutoGenerateColumns
=
"False"
OnInsertCommand
=
"grdFiles_Insert"
OnUpdateCommand
=
"grdFiles_Update"
OnEditCommand
=
"grdFiles_Command"
AllowSorting
=
"True"
OnDeleteCommand
=
"grdFiles_Command"
OnNeedDataSource
=
"grdFiles_NeedDataSource"
OnCancelCommand
=
"grdFiles_Command"
OnItemDataBound
=
"grdFiles_ItemDataBound"
PageSize
=
"10"
OnItemCommand
=
"grdFiles_ItemCommand"
GridLines
=
"None"
>
<
MasterTableView
DataKeyNames
=
"CollectionFileID"
CommandItemDisplay
=
"Top"
EditMode
=
"EditForms"
>
<
CommandItemSettings
ShowAddNewRecordButton
=
"true"
AddNewRecordImageUrl
=
"~/Images/AddRecord.gif"
AddNewRecordText
=
"Upload New Collection File"
>
</
CommandItemSettings
>
<
RowIndicatorColumn
FilterControlAltText
=
"Filter RowIndicator column"
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
FilterControlAltText
=
"Filter ExpandColumn column"
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
ExpandCollapseColumn
>
<
NoRecordsTemplate
>
<
div
> No files available.</
div
>
</
NoRecordsTemplate
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"CollectionFileID"
DataType
=
"System.Int32"
FilterControlAltText
=
"Filter CollectionFileID column"
HeaderText
=
"ID"
ReadOnly
=
"True"
SortExpression
=
"CollectionFileID"
UniqueName
=
"CollectionFileID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"OriginalFileName"
FilterControlAltText
=
"Filter OriginalFileName column"
HeaderText
=
"Original Name"
UniqueName
=
"OriginalFileName"
ReadOnly
=
"true"
SortExpression
=
"OriginalFileName"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"AssignedFileName"
FilterControlAltText
=
"Filter AssignedFileName column"
HeaderText
=
"Assigned Name"
SortExpression
=
"AssignedFileName"
Visible
=
"false"
UniqueName
=
"AssignedFileName"
ReadOnly
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridDateTimeColumn
DataField
=
"UploadDate"
FilterControlAltText
=
"Filter UploadDate column"
HeaderText
=
"Date Uploaded"
SortExpression
=
"UploadDate"
UniqueName
=
"UploadDate"
ReadOnly
=
"true"
DataFormatString
=
"{0:d}"
>
</
telerik:GridDateTimeColumn
>
<
telerik:GridDateTimeColumn
DataField
=
"Modified"
FilterControlAltText
=
"Filter Modified column"
HeaderText
=
"Date Modified"
SortExpression
=
"Modified"
UniqueName
=
"Modified"
ReadOnly
=
"true"
DataFormatString
=
"{0:d}"
>
</
telerik:GridDateTimeColumn
>
<
telerik:GridTemplateColumn
DataField
=
"Description"
FilterControlAltText
=
"Filter Description column"
HeaderText
=
"Description/Instruction"
SortExpression
=
"Description"
UniqueName
=
"Description"
>
<
EditItemTemplate
>
<
telerik:RadTextBox
ID
=
"DescriptionTextBox"
runat
=
"server"
Text='<%# Bind("Description") %>'
Width="300px" Height="150px" TextMode="MultiLine"></
telerik:RadTextBox
>
</
EditItemTemplate
>
<
ItemTemplate
>
<
asp:Label
ID
=
"DescriptionLabel"
runat
=
"server"
Text='<%# Eval("Description") %>'></
asp:Label
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridAttachmentColumn
EditFormHeaderTextFormat
=
"Upload File:"
HeaderText
=
"Download"
AttachmentDataField
=
"BinaryData"
AttachmentKeyFields
=
"CollectionFileID"
FileNameTextField
=
"OriginalFileName"
DataTextField
=
"OriginalFileName"
UniqueName
=
"AttachmentColumn"
>
</
telerik:GridAttachmentColumn
>
<
telerik:GridEditCommandColumn
HeaderText
=
"Edit"
ButtonType
=
"LinkButton"
>
<
HeaderStyle
Width
=
"2%"
/>
</
telerik:GridEditCommandColumn
>
<
telerik:GridButtonColumn
Text
=
"Delete"
HeaderText
=
"Delete"
CommandName
=
"Delete"
ButtonType
=
"LinkButton"
>
<
HeaderStyle
Width
=
"2%"
/>
</
telerik:GridButtonColumn
>
</
Columns
>
<
EditFormSettings
>
<
EditColumn
FilterControlAltText
=
"Filter EditCommandColumn column"
></
EditColumn
>
</
EditFormSettings
>
</
MasterTableView
>
<
FilterMenu
EnableImageSprites
=
"False"
></
FilterMenu
>
<
HeaderContextMenu
CssClass
=
"GridContextMenu GridContextMenu_Default"
></
HeaderContextMenu
>
</
telerik:RadGrid
>
Here is a code for insertion:
protected void grdFiles_Insert(object sender, GridCommandEventArgs e)
{
//Insertion Logic
if (e.Item is GridEditableItem && e.Item.IsInEditMode)
{
GridEditableItem item = e.Item as GridEditableItem;
RadTextBox txtDesc = item.FindControl("DescriptionTextBox") as RadTextBox;
RadUpload upload = (item.EditManager.GetColumnEditor("AttachmentColumn") as GridAttachmentColumnEditor).RadUploadControl;
if (upload != null)
{
UploadedFileCollection upFiles = upload.UploadedFiles;
if (upFiles.Count == 0)
{
//throw new Exception("No file uploaded");
string script = string.Format("alert('No file uploaded');");
ScriptManager.RegisterStartupScript(Page, typeof(Page), "myNoFileScript", script, true);
return;
}
if (upload.InvalidFiles.Count > 0)
{
//throw new Exception("Invalid file type or file size is greater than maximum allowed.");
string script = string.Format("alert('Invalid file type or file size is greater than maximum allowed.');");
ScriptManager.RegisterStartupScript(Page, typeof(Page), "myInvalidFileScript", script, true);
return;
}
CollectionFile oFile = new CollectionFile();
if (txtDesc != null)
{
oFile.Description = txtDesc.Text.Trim();
}
DateTime uploadTime = DateTime.Now;
oFile.UploadDate = uploadTime;
upload.OverwriteExistingFiles = true;
foreach (UploadedFile upfile in upFiles)
{
oFile.OriginalFileName = upfile.GetName();
oFile.FileSize = upfile.ContentLength;
oFile.FileExtension = upfile.GetExtension();
string assignedSystemFileName = System.IO.Path.GetFileNameWithoutExtension(upfile.GetName()) + "_" + System.Guid.NewGuid().ToString() + upfile.GetExtension();
oFile.AssignedFileName = assignedSystemFileName;
//Save File to server's file system
upfile.SaveAs(Server.MapPath("~/CollectionUploads/" + assignedSystemFileName), true);
}
oFile.Modified = uploadTime;
CollectionFile.Insert(oFile);
oFile = null;
grdFiles.Rebind();
}
}
}
Here is my Update Method:
protected void grdFiles_Update(object sender, GridCommandEventArgs e)
{
if (e.Item is GridEditableItem && e.Item.IsInEditMode)
{
GridEditableItem itm = e.Item as GridEditableItem;
string collFileId = Convert.ToString(itm.GetDataKeyValue("CollectionFileID"));
//Edit Files
RadTextBox txtDesc = itm.FindControl("DescriptionTextBox") as RadTextBox;
RadUpload upload = (itm.EditManager.GetColumnEditor("AttachmentColumn") as GridAttachmentColumnEditor).RadUploadControl;
CollectionFile oFile = CollectionFile.GetEntity(collFileId);
if (oFile != null)
{
DateTime ModifyTime = DateTime.Now;
if (txtDesc != null)
oFile.Description = txtDesc.Text.Trim();
if (upload != null)
{
upload.OverwriteExistingFiles = true;
UploadedFileCollection upFiles = upload.UploadedFiles;
//If new File is uploaded then delete old file
if (upFiles.Count != 0)
{
//New File is selected to upload
if (File.Exists(Server.MapPath("~/CollectionUploads/" + oFile.AssignedFileName)))
{
File.Delete(Server.MapPath("~/CollectionUploads/" + oFile.AssignedFileName));
}
}
foreach (UploadedFile upfile in upFiles)
{
oFile.OriginalFileName = upfile.GetName();
oFile.FileSize = upfile.ContentLength;
oFile.FileExtension = upfile.GetExtension();
string assignedSystemFileName = System.IO.Path.GetFileNameWithoutExtension(upfile.GetName()) + "_" + System.Guid.NewGuid().ToString() + upfile.GetExtension();
oFile.AssignedFileName = assignedSystemFileName;
//Save File to server's file system
upfile.SaveAs(Server.MapPath("~/CollectionUploads/" + assignedSystemFileName), true);
}
}
oFile.Modified = ModifyTime;
CollectionFile.Update(oFile);
oFile = null;
grdFiles.Rebind();
}
}
}
what am I doing wrong here ?
Just To Update you that my Grid is in RadAjaxPanel which in turn, uses loading panel. Anytime when I set EnableAJAX="false" for RadAjaxPanel then Upload control works well, but It stop working as soon as I set EnableAJAX="true".
Thanks
Tejas