Underligt probleme med webcontrols og DataBind()
Har det problem at min side giver fejlen "Exception Details: System.NullReferenceException: Object reference not set to an instance of an object." til functionerne ved pilene i følgende syntax: (repNews1 er id'et på en repeater-control!)<%@ Page Language="VB" Trace="true" %>
<%@ Register TagPrefix="inc" TagName="leftside" Src="include/leftside.ascx" %>
<%@ Register TagPrefix="inc" TagName="rightside" Src="include/rightside.ascx" %>
<%@ Register TagPrefix="inc" TagName="topbar" Src="include/topbar.ascx" %>
<%@ Register TagPrefix="inc" TagName="footer" Src="include/footer.ascx" %>
<%@ Register TagPrefix="inc" TagName="head" Src="include/head.ascx" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="MysqlAccess" %>
<%@ import Namespace="ConvertFunctions" %>
<script runat="server">
Public cdt as new CDateTime
Sub Page_Load(Sender As Object, e As eventargs)
dim dc as New DataColletor, ds As New DataSet
If not Page.IsPostBack Then
--> dc.FillRepeater(repNews1,"Select id, topicid, headline, shortcontent, datotid From news Order By datotid Desc Limit 0,10")
--> dc.FillRepeater(repNews2,"Select id, headline, datotid From news Order By datotid Desc Limit 10,10")
--> dc.FillRepeater(repArt,"Select id, headline, shortcontent, datotid From articles Order By datotid Desc Limit 0,4")
End If
End Sub
</script>
Kildekoden til objektet DataColletor ses her:
Imports System
Imports System.Data
Imports System.Data.Odbc
Imports System.Xml
Imports System.Web.UI.Webcontrols
Namespace MysqlAccess
Public Class DataColletor
Dim strDSN As String = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=xxxx.xxxx.dk; DATABASE=xxxxx; UID=xxxxx; PWD=xxxxxxxxxx;"
Dim objConn As New OdbcConnection(strDSN)
Public Sub New()
End Sub
Public Function CreateDataSet(strTable As String, strSQL As String) As DataSet
Dim objCmd As New OdbcDataAdapter(strSQL, objConn)
Dim ds As New DataSet()
Try
objCmd.Fill(ds, strTable)
Catch
'Hvad der skal gøres når databasen ikke svare
End Try
Return ds
End Function
Public Function AddTable(ds As DataSet, strTable As String, strSQL As String) As DataSet
Dim objCmd As New OdbcDataAdapter(strSQL, objConn)
Try
objCmd.Fill(ds, strTable)
Catch
'Hvad der skal gøres når databasen ikke svare
End Try
Return ds
End Function
Public Sub FillRepeater(objRep As Repeater, strSQL As String)
Dim objCmd As New OdbcCommand(strSQL, objConn), intRowCount As Integer = 0
Dim objReader As OdbcDataReader
Try
objConn.Open()
objReader = objCmd.ExecuteReader()
Catch
'Hvad der skal gøres når databasen ikke svare
End try
objRep.DataSource = objReader
objRep.DataBind()
objReader.Close
objConn.Close()
End Sub
Public Function CreateDataView(strSQL As String) As DataView
Dim objCmd As New OdbcDataAdapter(strSQL, objConn), ds As New DataSet()
Try
objCmd.Fill(ds, "tbl")
Catch
'Hvad der skal gøres når databasen ikke svare
End Try
Dim dv As New DataView(ds.Tables("tbl"))
Return dv
End Function
End Class
End Namespace
IsPostBack hjælper ikke på problemet! Tidligere er der stillet spørgsmålstegn ved, om siden har nået at indlæse repeaterne før kode bliver udført, men hvordan lægger man koden efter at repeaterne er indlæst?
Håber der er nogen der kan komme med en løsning!