2011-07-26 13 views
0

ASP.NetとVB.Netで、GridViewのデータを昇順または降順で並べ替えることができるサイトを開発しています。文字列「DESC」から「Double」の型への変換が無効です

レコードはSQL Server Expressデータベースからのものです。

私は、データをソートする列の見出しをクリックして行くと、私は次のエラーを取得する:ダブルを

「と入力する文字列から変換 『DESC』 『は』は有効ではありません。」以下は

私はソートに使用していますコードです:

Protected Sub Button3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button3.Click 

     Dim sqlConn As New SqlConnection 
     Dim sqlCmd As New SqlClient.SqlCommand 
     Dim sqlReader As SqlDataReader 

     'If no values are supplied in the textbox, throw an error message. 
     If TextBox2.Text = "" Then 
      MsgBox("A centre code needs to be provided...") 
     End If 

     If TextBox2.Text <> "" Then 

      'Telling the system the location of the database. 
      sqlConn.ConnectionString = "server=servername;Initial Catalog=dbName;Trusted_Connection=yes" 

      'Here we are opening the connection to the database. 
      sqlConn.Open() 

      'This is to say that sqlCmd is a stored procedure. 
      sqlCmd.CommandType = System.Data.CommandType.StoredProcedure 

      'This is creating the command to execute the stored procedure based on the information given in the connection string. 
      sqlCmd = sqlConn.CreateCommand 

      'The command is triggered to execute the stored procedure which grabs all information for the specific centre. 
      sqlCmd.CommandText = "exec GetAllInformationKCSEBoxes '" & TextBox2.Text & "' " 

      'This will read the rows in the database. 
      sqlReader = sqlCmd.ExecuteReader() 

      GridView2.Columns.Clear() 'If there are rows of data that match are criteria 
      If (sqlReader.HasRows) Then 

       'The rows of data are grabbed for the specific centre from the database using the data reader. 
       GridView2.DataSource = sqlReader 
       GridView2.DataBind() 
       GridView2.Columns.Clear() 
      Else 
       MsgBox("The centre code provided does not exist...") 
      End If 

      'This is closing the connection to the database once we have finished with it. 
      sqlConn.Close() 

      'This is to clear the list of items out of the GridView box. 

     End If 

    End Sub 

    Property GridViewSortDirection() As String 
     Get 
      If IsNothing(ViewState.Item("GridViewSortDirection")) Then 
       Return "desc" 
      End If 
      Return ViewState.Item("GridViewSortDirection") 
     End Get 

     Set(ByVal Value As String) 
      ViewState.Item("GridViewSortDirection") = Value 
     End Set 

    End Property 

    Function GetSortDirection() As String 

     Dim GridViewSortDirectionNew As String 

     Select Case GridViewSortDirection 

      Case "DESC" 
       GridViewSortDirectionNew = "ASC" 

      Case "ASC" 
       GridViewSortDirectionNew = "DESC" 

      Case Else 
       GridViewSortDirectionNew = "DESC" 

     End Select 
     GridViewSortDirection = GridViewSortDirectionNew 

     Return GridViewSortDirectionNew 

    End Function 

    Protected Sub GridView_Sorting1(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles GridView2.Sorting 

     Dim myPageIndex As Integer = GridView2.PageIndex 
     Dim mySortdirection As String = GetSortDirection() 
     Dim sortExpression = e.SortExpression 
     Dim dv As New DataView() 


     If (GridViewSortDirection = SortDirection.Ascending) Then 

      GridViewSortDirection = SortDirection.Descending 
      'SortGridView(sortExpression, "DESCENDING") 
     Else 
      GridViewSortDirection = SortDirection.Ascending 

     End If 


     'dv.Table = GridView2.DataSource 

     '   dv.Sort = e.SortExpression & " " & mySortdirection 
     '   GridView2.DataSource = dv 
     ' 
     '   GridView2.DataBind() 
     ' 
     '   GridView2.PageIndex = myPageIndex 

    End Sub 

    'Protected Sub SortGridView(string sortExpression,string direction) 

    'DataTable dt = GetData().Tables[0] 

    '   DataView(GridView2 = New DataView(GridView2)) 
    '   GridView2.Sort = sortExpression + Direction 
    ' 
    '   GridView1.DataSource = GridView2 
    '   GridView1.DataBind() 
    ' 
    '  End Sub 

私は、私は文字列を使用しています、ダブルを使用していないと、このエラーが何を意味するのかわかりません。次のように

私のGridViewのは、次のとおりです。

<asp:GridView ID="GridView2" runat="server" Height="143px" AllowSorting="true" OnSorting="GridView_Sorting1" 

は、どのように私はこの問題を乗り越えることができますか?

すべての助力とアドバイスをいただければ幸いです。

多くのおかげで、

ダン

+0

こんにちはダン。スタックオーバーフローへようこそ。また、エラーメッセージを報告するときに、スタックされている行が何であるかを明確にしてください。たぶん、doubleを期待するプロパティに文字列を代入しようとしていますが、エラーがスローされた行が分かっていれば、どちらを解決するのがはるかに簡単です。 :) – Chris

答えて

1

あなたはそれが問題の原因である可能性がありますように見えるあなたのコード内で比較GridViewSortDirection = SortDirection.Ascendingを使用しています。変換の問題を引き起こす列挙型と文字列を比較しようとしています。そのような文字列宣言をすべて変更して、列挙型を使用して、同じように比較することができます。

これはコードでおそらくの問題である可能性があります。 :)

+0

こんにちはクリス、ご返答いただきありがとうございます、もう少し詳しくお聞かせください。私はVB.Netの初心者ですので、勉強しようとしています。ありがとう、ダン – Dan

+0

@ダン:本質的に、刺しとenumは異なるものなので時々(今のように)それらを比較しようとすると問題が発生する可能性があります。私はこれが実際にあなたのエラーを引き起こしているとは思わない、あなたに潜在的に潜在的な問題を引き起こしている可能性が高いと言われています。エラーの詳細(行番号など)を求めるメインの質問に関する私の他のコメントに答えることができますか? – Chris

関連する問題