Έχω βρει μια λύση που κάνω και bind οπότε σας την γράφω για σχολιασμό. Επίσης διάβασα κάτι ωραία άρθα πάνω στο binding με χρήση του Eval(),Bind(),Xpath() το πιο καλό ήταν
αυτό.
Protected Function LoadFromReaderDictionary(ByVal reader As SqlDataReader) As IDictionary
Dim dict As IDictionary = New Dictionary(Of String, String)()
If Not IsNothing(reader) AndAlso Not reader.IsClosed Then
Dim curstr As String = ""
Dim TotalFields As Integer = reader.FieldCount - 1
For i As Integer = 0 To TotalFields
If Not (reader.IsDBNull(i)) Then
curstr = reader.GetValue(i)
Else
curstr = ""
End If
dict.Add(reader.GetName(i), curstr)
Next
End If
Return dict
End Function
Public Function SelectWithPaddingDictionary(ByVal StartRow As Integer, ByVal PageSize As Integer, _
ByVal sSearch As String, ByVal sortedBy As String) As Generic.List(Of IDictionary)
Dim myGenericList As New Generic.List(Of IDictionary)
Using curConKlisi As New SqlConnection(connectionString)
Using curComKlisi As New SqlCommand("[dbo].[usp_StroP]", curConKlisi)
curComKlisi.CommandType = CommandType.StoredProcedure
curComKlisi.Parameters.Add("@PageSize", Data.SqlDbType.Int).Value = PageSize
curComKlisi.Parameters.Add("@StartRow", Data.SqlDbType.Int).Value = StartRow
curComKlisi.Parameters.Add("@sSearch", Data.SqlDbType.NVarChar).Value = sSearch
curComKlisi.Parameters.Add("@sortedBy", Data.SqlDbType.NVarChar).Value = sortedBy
Try
curConKlisi.Open()
Dim reader As SqlDataReader = curComKlisi.ExecuteReader()
If reader.HasRows Then
Do While (reader.Read())
myGenericList.Add(Me.LoadFromReaderDictionary(reader))
Loop
Else
reader.Close()
If Not reader.IsClosed Then
reader.Close()
End If
'Throw New ApplicationException("News does not exist.")
Return Nothing
End If
Catch ex As Exception
Throw New ProviderException(ex.Message)
Finally
curConKlisi.Close()
End Try
End Using
End Using
Return myGenericList
End Function
Public Function SelectWithPaddingCounter(ByVal sSearch As String) As Integer
Dim myCounter As Integer
Using curConKlisi As New SqlConnection(connectionString)
Using curComKlisi As New SqlCommand("[dbo].[usp_StroPCounter]", curConKlisi)
curComKlisi.CommandType = CommandType.StoredProcedure
curComKlisi.Parameters.Add("@sSearch", Data.SqlDbType.NVarChar).Value = sSearch
Try
curConKlisi.Open()
myCounter = CInt(curComKlisi.ExecuteScalar())
Catch ex As Exception
Throw New ProviderException(ex.Message)
Finally
curConKlisi.Close()
End Try
End Using
End Using
Return myCounter
End Function
Αυτές είναι οι συναρτίσεις για να πέρνω τα δεδομένα. Που χρειάζονται και στον ObjectDataSource.
Τώρα το bind γίνετε έτσι. (Πολύ χρήσιμο άρθρο αυτό που έχω και στην αρχή
http://www.haiders.net/post/How-to-Avoid-the-Eval-Method-for-DataBinding.aspx )
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
DataKeyNames="" AllowPaging="True" AllowSorting="True" DataSourceID="ObjectDataSource1">
<Columns>
<asp:TemplateField HeaderText="Α/Α" SortExpression="Id" >
<ItemTemplate>
<%#CType(Container.DataItem, IDictionary).Item("Id").ToString()%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="SelectWithPaddingDictionary" TypeName="myClass" EnablePaging="True"
MaximumRowsParameterName="PageSize" SelectCountMethod="SelectWithPaddingCounter"
StartRowIndexParameterName="StartRow" SortParameterName="sortedBy">
<SelectParameters>
<asp:Parameter Name="sSearch" Type="String" DefaultValue=" "/>
</SelectParameters>
</asp:ObjectDataSource>
Θα ήθελα ένα σχολιασμό/προτάσεις. Πάντως την δουλειά μου προς το παρόν την κάνει.