Conversion failed when converting datetime from character string.
Tenho uma página chamada Ficha.aspx onde tem um datagrid, conforme o código abaixo:
<asp:datagrid id="grdBrowse" runat="server" Width="100%" BorderWidth="1px" BackColor="White" BorderColor="Gray" AllowPaging="true" AlternatingItemStyle-BackColor="#C0C0C0" Font-Size="10px" Font-Name="Arial" OnPageIndexChanged="PageChange" PagerStyle-HorizontalAlign="Center" PagerStyle-Mode="NextPrev" DataKeyField="inFichaId" AutogenerateColumns="False" PagerStyle-PageButtonCount="10" AlternatingItemStyle-Font-Size="11" AlternatingItemStyle-Font-Name="Arial"headerstyle-Font-Size="14" headerstyle-Font-Bold="true" headerstyle-Font-Name="Arial" HeaderStyle-ForeColor="GrayText" HeaderStyle-Font-Underline="false" cellpadding="1" Font-Names="Arial" OnItemDataBound="BrowseItemDataBound" OnDeleteCommand="BrowseDelete" PageSize="20" AllowSorting="true">
<SelectedItemStyle ForeColor="#3366FF"></SelectedItemStyle>
<EditItemStyle Font-Size="10px" Font-Names="Arial" Font-Bold="true" ForeColor="White" BackColor="#00CCFF"></EditItemStyle>
<AlternatingItemStyle Font-Size="10px" Font-Names="Arial" BackColor="White"></AlternatingItemStyle>
<headerStyle Font-Size="11px" Font-Names="Arial" Font-Bold="true" CssClass="LABELTEXTBOX" BackColor="Silver" Font-Underline="false"></headerStyle>
<Columns>
<asp:BoundColumn DataField="inNumeroIni" ReadOnly="true" headerText="Número Inicial" SortExpression="inNumeroIni">
<headerStyle HorizontalAlign="Right"></headerStyle>
<ItemStyle HorizontalAlign="Right"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="inNumeroFim" ReadOnly="true" headerText="Número Final" SortExpression="inNumeroFim">
<headerStyle HorizontalAlign="Right"></headerStyle>
<ItemStyle HorizontalAlign="Right"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="dtPedido" ReadOnly="true" headerText="Data Operação" DataFormatString="{0:dd/MM/yyyy}" SortExpression="dtPedido">
<headerStyle HorizontalAlign="Center"></headerStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="dtEntrega" ReadOnly="true" headerText="Data Entrega" DataFormatString="{0:dd/MM/yyyy}" SortExpression="dtEntrega">
<headerStyle HorizontalAlign="Center"></headerStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="stObs" ReadOnly="true" headerText="Observação" SortExpression="stObs">
<headerStyle HorizontalAlign="Center"></headerStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundColumn>
<asp:ButtonColumn Text="<img SRC=images/bt_grid_edit.gif Border=0 alt='Alterar';" CommandName="Select">
<headerStyle Width="20px"></headerStyle>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle"></ItemStyle>
</asp:ButtonColumn>
<asp:ButtonColumn Text="<img SRC=images/bt_grid_del.gif Border=0 alt='Excluir'
onclick="return confirm('Tem certeza que deseja excluir?')" Width=19 Height=15>" CommandName="Delete">
<headerStyle Width="20px"></headerStyle>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle"></ItemStyle>
</asp:ButtonColumn>
</Columns>
<PagerStyle NextPageText="<img SRC=images/bt_grid_next_pg.gif Border=0 Width=19 Height=15>"
PrevPageText="<img SRC=images/bt_grid_prev_pg.gif Border=0 Width=19 Height=15>" HorizontalAlign="Center"></PagerStyle>
</asp:datagrid>
Ao clicar na coluna observação para fazer a ordenação ele apresenta a seguinte mensagem de erro: Conversion failed when converting datetime from character string.
Só que esse campo stobs não é datetime e sim string (e varchar no banco), os outros ordena normal..
No load da pagina eu chamo essa funçao BindBrowse que popula o grid
Código da página ficha.aspx.vb
Private Sub BindBrowse()
grdBrowse.DataSource = CSClasse.Lista(ViewState("fichaSortExpr"))
grdBrowse.DataBind()
grdBrowse.SelectedIndex = -1
No SortCommand deveria ordenar mas quando eu clico no campo observação da essa mensagem de erro:
Protected Sub grdBrowse_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles grdBrowse.SortCommand
Dim newSortExpr As String = e.SortExpression
ViewState("fichaSortExpr") = newSortExpr
BindBrowse()
End Sub
Código da CSClasse.vb, a função que chama a procedure que lista os campos no datagrid
Public Shared Function Lista(Optional ByVal order As String = "") As DataSet
Dim cnn As New SqlConnection()
cnn.ConnectionString = _stStringConexao
Dim cmd As New SqlCommand("st_procedure", cnn)
With cmd
.CommandText = "st_procedure"
.CommandType = CommandType.StoredProcedure
.Parameters.Add("@order", SqlDbType.VarChar).Value = order
End With
Dim adp As New SqlDataAdapter(cmd)
Dim sdr As New DataSet()
adp.Fill(sdr, "lista")
cnn.Close()
Return CType(sdr, DataSet)
End Function
Código da st_procedure que é chamada para popular os campos e fazer a ordenação:
ALTER procedure [dbo].[st_procedure]
(@order varchar(500) = null)
as begin
select inFichaId , stDescricao = 'de ' + convert(varchar, inNumeroIni) + ' à ' + convert(varchar, inNumeroFim), f.inNumeroIni, f.inNumeroFim ,dtPedido, dtEntrega, stObs from ficha where inAtivo= 1
order by
case @order
when 'inNumeroIni' then inNumeroIni
when 'inNumeroFim' then inNumeroFim
when 'dtPedido' then dtPedido
when 'dtEntrega' then dtEntrega
when 'stObs' then stObs
else inFichaId
end
Novamente conto com a ajuda de vocês
Discussão (13)
Carregando comentários...