OVH Cloud OVH Cloud

Erreur ItemDataBound sur un datagrid

3 réponses
Avatar
Thibault
Bonjour à tous,

J'essaie désespérément de remplir mes colonnes de mon datagrid au moment de
l'execution mais rien a faire j'ai toujours cette erreur :

Message d'erreur : La référence d'objet n'est pas définie à une instance
d'un objet.

Source de l'erreur : Intranet

Trace de l'erreur : at
Intranet.RechercheTicket.DgResultSearchTicket_ItemDataBound(Object sender,
DataGridItemEventArgs e) in
c:\inetpub\wwwroot\POSTUP\Intranet\TicketClient\RechercheTicket.aspx.vb:line
267 at
System.Web.UI.WebControls.DataGrid.OnItemDataBound(DataGridItemEventArgs e)
at System.Web.UI.WebControls.DataGrid.CreateItem(Int32 itemIndex, Int32
dataSourceIndex, ListItemType itemType, Boolean dataBind, Object dataItem,
DataGridColumn[] columns, TableRowCollection rows, PagedDataSource
pagedDataSource) at
System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean
useDataSource) at
System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) at
System.Web.UI.WebControls.BaseDataList.DataBind() at
Intranet.RechercheTicket.BindData(String SortExpr) in
c:\inetpub\wwwroot\POSTUP\Intranet\TicketClient\RechercheTicket.aspx.vb:line
219

Voici mon code si ça peut vous aider :

....

Dim mDs As New DataSet("TICKET_TICK")
Dim mAdap As New SqlDataAdapter(SQLSelect, mConn)

Try

mAdap.Fill(mDs, "TICKET_TICK")

DgResultSearchTicket.DataSource =
mDs.Tables("TICKET_TICK").DefaultView
DgResultSearchTicket.DataBind()

....

Et voici la partie ItemDataBound :


Protected Sub DgResultSearchTicket_ItemDataBound(ByVal sender As Object,
ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles
DgResultSearchTicket.ItemDataBound
Dim myItem As DataRowView
myItem = e.Item.DataItem

If Not IsDBNull(myItem) Then
CType(e.Item.FindControl("myLabelTICK_ID"), Label).Text =
myItem("TICK_ID").ToString()
End If

End Sub


Merci à tous pour le coup de main.

3 réponses

Avatar
Thibault
Je viens de modifier mon code source mais toujours la même erreur :

Public Sub DgResultSearchTicket_ItemDataBound(ByVal sender As Object, ByVal
e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles
DgResultSearchTicket.ItemDataBound

Dim myItem As DataRowView
myItem = e.Item.DataItem

If Not IsDBNull(myItem) Then
Dim L1 As Label
L1 = e.Item.FindControl("myLabelTICK_ID")
L1.Text = myItem("TICK_ID").ToString()
End If

End Sub

"Thibault" a écrit :

Bonjour à tous,

J'essaie désespérément de remplir mes colonnes de mon datagrid au moment de
l'execution mais rien a faire j'ai toujours cette erreur :

Message d'erreur : La référence d'objet n'est pas définie à une instance
d'un objet.

Source de l'erreur : Intranet

Trace de l'erreur : at
Intranet.RechercheTicket.DgResultSearchTicket_ItemDataBound(Object sender,
DataGridItemEventArgs e) in
c:inetpubwwwrootPOSTUPIntranetTicketClientRechercheTicket.aspx.vb:line
267 at
System.Web.UI.WebControls.DataGrid.OnItemDataBound(DataGridItemEventArgs e)
at System.Web.UI.WebControls.DataGrid.CreateItem(Int32 itemIndex, Int32
dataSourceIndex, ListItemType itemType, Boolean dataBind, Object dataItem,
DataGridColumn[] columns, TableRowCollection rows, PagedDataSource
pagedDataSource) at
System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean
useDataSource) at
System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) at
System.Web.UI.WebControls.BaseDataList.DataBind() at
Intranet.RechercheTicket.BindData(String SortExpr) in
c:inetpubwwwrootPOSTUPIntranetTicketClientRechercheTicket.aspx.vb:line
219

Voici mon code si ça peut vous aider :

....

Dim mDs As New DataSet("TICKET_TICK")
Dim mAdap As New SqlDataAdapter(SQLSelect, mConn)

Try

mAdap.Fill(mDs, "TICKET_TICK")

DgResultSearchTicket.DataSource =
mDs.Tables("TICKET_TICK").DefaultView
DgResultSearchTicket.DataBind()

....

Et voici la partie ItemDataBound :


Protected Sub DgResultSearchTicket_ItemDataBound(ByVal sender As Object,
ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles
DgResultSearchTicket.ItemDataBound
Dim myItem As DataRowView
myItem = e.Item.DataItem

If Not IsDBNull(myItem) Then
CType(e.Item.FindControl("myLabelTICK_ID"), Label).Text =
myItem("TICK_ID").ToString()
End If

End Sub


Merci à tous pour le coup de main.


Avatar
Zazar
Bonsoir,

Je viens de modifier mon code source mais toujours la même erreur :




Le plus simple pour repérer l'erreur, c'est d'utiliser un débogueur et de
faire du pas à pas.


Public Sub DgResultSearchTicket_ItemDataBound(ByVal sender As Object,
ByVal
e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles
DgResultSearchTicket.ItemDataBound

Dim myItem As DataRowView
myItem = e.Item.DataItem

If Not IsDBNull(myItem) Then



if not myItem is nothing plutôt

IsDBNull sert à tester si un champ d'une base de données est nulle ou pas.

is nothing sert à tester si une référence est nulle ou pas.


Dim L1 As Label
L1 = e.Item.FindControl("myLabelTICK_ID")



Ici un test L1 is nothing s'impose : vous n'avez aucune garantie que la
méthode FindControl va réussir.


L1.Text = myItem("TICK_ID").ToString()
End If

End Sub




Votre problème vient trés certainement du fait que L1 doit être égal à
nothing sous certaines conditions (peut-être lors de la construction d'un
item particulier tel que les headers). Votre code doit-il s'appliquer aussi
sur les en-têtes ? Si non, vous devez tester le type de e.item.

Si toutefois ça ne résolvait pas le problème, repostez votre code et
indiquez précisément la ligne où a lieu l'erreur.



--

Zazar
Avatar
Norm
l'erreur vient du fait que dans le item databound tu ne teste pas sur quel
type d'item tu es.
ajoute
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType =
ListItemType.AlternatingItem Then

'ton code

end if

Car dans le itemdatabound, il passe en premier sur le header et footer à la
fin, et ton label myLabelTICK_ID n'existe pas pour le header et footer.




"Thibault" a écrit dans le message de
news:
Bonjour à tous,

J'essaie désespérément de remplir mes colonnes de mon datagrid au moment
de
l'execution mais rien a faire j'ai toujours cette erreur :

Message d'erreur : La référence d'objet n'est pas définie à une instance
d'un objet.

Source de l'erreur : Intranet

Trace de l'erreur : at
Intranet.RechercheTicket.DgResultSearchTicket_ItemDataBound(Object sender,
DataGridItemEventArgs e) in
c:inetpubwwwrootPOSTUPIntranetTicketClientRechercheTicket.aspx.vb:line
267 at
System.Web.UI.WebControls.DataGrid.OnItemDataBound(DataGridItemEventArgs
e)
at System.Web.UI.WebControls.DataGrid.CreateItem(Int32 itemIndex, Int32
dataSourceIndex, ListItemType itemType, Boolean dataBind, Object dataItem,
DataGridColumn[] columns, TableRowCollection rows, PagedDataSource
pagedDataSource) at
System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean
useDataSource) at
System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) at
System.Web.UI.WebControls.BaseDataList.DataBind() at
Intranet.RechercheTicket.BindData(String SortExpr) in
c:inetpubwwwrootPOSTUPIntranetTicketClientRechercheTicket.aspx.vb:line
219

Voici mon code si ça peut vous aider :

....

Dim mDs As New DataSet("TICKET_TICK")
Dim mAdap As New SqlDataAdapter(SQLSelect, mConn)

Try

mAdap.Fill(mDs, "TICKET_TICK")

DgResultSearchTicket.DataSource > mDs.Tables("TICKET_TICK").DefaultView
DgResultSearchTicket.DataBind()

....

Et voici la partie ItemDataBound :


Protected Sub DgResultSearchTicket_ItemDataBound(ByVal sender As Object,
ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles
DgResultSearchTicket.ItemDataBound
Dim myItem As DataRowView
myItem = e.Item.DataItem

If Not IsDBNull(myItem) Then
CType(e.Item.FindControl("myLabelTICK_ID"), Label).Text > myItem("TICK_ID").ToString()
End If

End Sub


Merci à tous pour le coup de main.