J
Julia B
Hi all, I've got a gridview bound to an ObjectDataSource which connects to a
utility class that runs some SQL to return a dataset. This all works fine and
the gridview has the AllowSorting property set to true. This also works fine
but causes a knock-on problem.
Two of the columns in the gridview are button fields which fire the grid
RowCommand to open a file on a shared folder based on some data in one of the
row fields, which stores the filename.
These open the correct files when the gridview is opened, but if the user
sorts the gridview, then when the button field is clicked the wrong file is
opened. It seems that the sorting is visual only, i.e. if there are 3 rows
numbered 1, 2 and 3 unsorted and the user clicks the button field for row 3,
then the correct file for row 3 is opened. However if the user sorts the data
so that it is in reverse order (3,2,1) and clicks row number 1 which is now
3rd in the list, then the file for row number 3 opens.
Does this make sense? The code for the row command is below:
Dim index As Integer
Dim selectedRow As GridViewRow
Dim filePath As String
If e.CommandName = "Changes" Then
'if the user has selected change history, then find the serial
number
'of the record and open its change history
index = Convert.ToInt32(e.CommandArgument)
selectedRow = Me.SearchGrid.Rows(index)
Dim serialNumber As String = selectedRow.Cells(3).Text
Response.Redirect("ChangeHistory.aspx?SN=" & serialNumber)
ElseIf e.CommandName = "OrigRecord" Or e.CommandName = "OrigReport"
Then
'if the user has selected to open the original record
'get the selected row
index = Convert.ToInt32(e.CommandArgument)
selectedRow = Me.SearchGrid.Rows(index)
Response.Buffer = False
Response.Clear()
Response.ClearHeaders()
'now get the record name
If e.CommandName = "OrigRecord" Then
filePath = selectedRow.Cells(9).Text
filePath = Global.Global_asax.linkPath & filePath
Response.AppendHeader("Content-Disposition",
"attachment;filename=" & System.IO.Path.GetFileName(filePath))
Response.ContentType = "text/csv"
Else
filePath = selectedRow.Cells(10).Text
filePath = Replace(filePath, "&", "&")
filePath = Global.Global_asax.linkPath & filePath
Response.AppendHeader("Content-Disposition",
"attachment;filename=" & System.IO.Path.GetFileName(filePath))
Response.ContentType = "text/plain"
End If
'now we've got the full path for the file, open it
Response.TransmitFile(filePath)
Response.End()
Else
'do nothing
End If
Thanks in advance.
Julia
utility class that runs some SQL to return a dataset. This all works fine and
the gridview has the AllowSorting property set to true. This also works fine
but causes a knock-on problem.
Two of the columns in the gridview are button fields which fire the grid
RowCommand to open a file on a shared folder based on some data in one of the
row fields, which stores the filename.
These open the correct files when the gridview is opened, but if the user
sorts the gridview, then when the button field is clicked the wrong file is
opened. It seems that the sorting is visual only, i.e. if there are 3 rows
numbered 1, 2 and 3 unsorted and the user clicks the button field for row 3,
then the correct file for row 3 is opened. However if the user sorts the data
so that it is in reverse order (3,2,1) and clicks row number 1 which is now
3rd in the list, then the file for row number 3 opens.
Does this make sense? The code for the row command is below:
Dim index As Integer
Dim selectedRow As GridViewRow
Dim filePath As String
If e.CommandName = "Changes" Then
'if the user has selected change history, then find the serial
number
'of the record and open its change history
index = Convert.ToInt32(e.CommandArgument)
selectedRow = Me.SearchGrid.Rows(index)
Dim serialNumber As String = selectedRow.Cells(3).Text
Response.Redirect("ChangeHistory.aspx?SN=" & serialNumber)
ElseIf e.CommandName = "OrigRecord" Or e.CommandName = "OrigReport"
Then
'if the user has selected to open the original record
'get the selected row
index = Convert.ToInt32(e.CommandArgument)
selectedRow = Me.SearchGrid.Rows(index)
Response.Buffer = False
Response.Clear()
Response.ClearHeaders()
'now get the record name
If e.CommandName = "OrigRecord" Then
filePath = selectedRow.Cells(9).Text
filePath = Global.Global_asax.linkPath & filePath
Response.AppendHeader("Content-Disposition",
"attachment;filename=" & System.IO.Path.GetFileName(filePath))
Response.ContentType = "text/csv"
Else
filePath = selectedRow.Cells(10).Text
filePath = Replace(filePath, "&", "&")
filePath = Global.Global_asax.linkPath & filePath
Response.AppendHeader("Content-Disposition",
"attachment;filename=" & System.IO.Path.GetFileName(filePath))
Response.ContentType = "text/plain"
End If
'now we've got the full path for the file, open it
Response.TransmitFile(filePath)
Response.End()
Else
'do nothing
End If
Thanks in advance.
Julia