Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

URGENT :Contrôle serveur composite datagrid

2 réponses
Avatar
Marc R
Bonjour,

J'ai cr=E9e un contr=F4le serveur bas=E9 sur un datagrid, dans=20
lequel je lui ai ajout=E9 une liste d=E9roulante dans la=20
section "pager" du contr=F4le, ceci dans le but d'agir sur=20
la propri=E9t=E9 "PageSize" du datagrid.

Pour cela, j'ai trifouill=E9 la collection "controls" du=20
datagrid pour rajouter un "Dropdownlist" au bon endroit.
J'ai ajout=E9 =E9galement =E0 mon dropdownlist des =E9l=E9ments=20
(20,50,100,200).
Jusque l=E0 tout va bien, ma liste d=E9roulante s'affiche=20
bien avec ses =E9l=E9ments =E0 l'int=E9rieur, mais je n'arrive=20
absolument pas =E0 intercepetr=20
l'=E9v=E8nement "SelectIndeChanged" de ma liste d=E9roulante=20
dans mon datagrid.

Voici mon code :

Imports System.ComponentModel
Imports System.Web.UI
Imports System
Imports System.IO
Imports System.Web.UI.WebControls


<ToolboxData("<{0}:DataGrid runat=3Dserver></{0}:DataGrid>")
> Public Class DataGrid
Inherits System.Web.UI.WebControls.DataGrid

Private WithEvents l_DropDownlistPager As=20
System.Web.UI.WebControls.DropDownList

Public Sub New()

SetDropDownListPager()

End Sub



Protected Overrides Sub RenderChildren(ByVal output=20
As HtmlTextWriter)
If HasControls() Then
If HasControls() Then
If Controls(0).HasControls Then

Dim tt As New TableCell
Dim Tbl As New=20
System.Web.UI.WebControls.Table
Dim TblRow As New=20
System.Web.UI.WebControls.TableRow
Dim TblCell As New TableCell

Dim MyCtrl As=20
System.Web.UI.WebControls.TableCell =3D Controls(0).Controls
(0).Controls(0)

tt.Controls.Add(l_DropDownlistPager)

Tbl.Controls.Add(TblRow)
TblRow.Controls.Add(MyCtrl)
TblRow.Controls.Add(tt)
TblCell.Controls.Add(Tbl)

TblRow.CssClass =3D CType(Controls
(0).Controls(0),=20
System.Web.UI.WebControls.TableRow).CssClass
CType(Controls(0).Controls(0),=20
System.Web.UI.WebControls.TableRow).CssClass =3D ""

TblCell.ColumnSpan =3D MyCtrl.ColumnSpan
MyCtrl.ColumnSpan =3D 0

Controls(0).Controls
(0).Controls.Remove(MyCtrl)
Controls(0).Controls(0).Controls.AddAt
(0, TblCell)
tt.HorizontalAlign =3D=20
HorizontalAlign.Right


Tbl.BorderStyle =3D BorderStyle.Solid
Tbl.Width =3D New=20
System.Web.UI.WebControls.Unit("100%")

'Controls(0).Controls(0).Controls
(0).Controls.Add(CType(toto, System.Web.UI.Control))

End If
End If
End If

MyBase.RenderChildren(output)

End Sub


Private Sub SetDropDownListPager()
l_DropDownlistPager =3D New=20
System.Web.UI.WebControls.DropDownList
l_DropDownlistPager.Items.Add("20")
l_DropDownlistPager.Items.Add("50")
l_DropDownlistPager.Items.Add("100")
l_DropDownlistPager.Items.Add("200")
l_DropDownlistPager.AutoPostBack =3D True
End Sub



Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub


End Class




Pouvez-vous m'aider, ca fait 3 jours que je suis dessus,=20
et je n'ai plus d'id=E9e ?

Merci de vos r=E9ponses.

Marc R

2 réponses

Avatar
Pierre Lagarde [MS]
Bonjour Marc,

Tu as testé le Controls.Add() dans la fonction "protected override void
OnLoad(EventArgs e)" plustôt que dans le RenderChildren ?
Car le RenderChildren arrive trop tard pour gérer les événements.
Bref tout ce que tu fais dans RenderChildren le faire dans OnLoad.

--
Pierre Lagarde
Microsoft France

Marc R wrote:
Bonjour,

J'ai crée un contrôle serveur basé sur un datagrid, dans
lequel je lui ai ajouté une liste déroulante dans la
section "pager" du contrôle, ceci dans le but d'agir sur
la propriété "PageSize" du datagrid.

Pour cela, j'ai trifouillé la collection "controls" du
datagrid pour rajouter un "Dropdownlist" au bon endroit.
J'ai ajouté également à mon dropdownlist des éléments
(20,50,100,200).
Jusque là tout va bien, ma liste déroulante s'affiche
bien avec ses éléments à l'intérieur, mais je n'arrive
absolument pas à intercepetr
l'évènement "SelectIndeChanged" de ma liste déroulante
dans mon datagrid.

Voici mon code :

Imports System.ComponentModel
Imports System.Web.UI
Imports System
Imports System.IO
Imports System.Web.UI.WebControls


<ToolboxData("<{0}:DataGrid runat=server></{0}:DataGrid>")
Public Class DataGrid


Inherits System.Web.UI.WebControls.DataGrid

Private WithEvents l_DropDownlistPager As
System.Web.UI.WebControls.DropDownList

Public Sub New()

SetDropDownListPager()

End Sub



Protected Overrides Sub RenderChildren(ByVal output
As HtmlTextWriter)
If HasControls() Then
If HasControls() Then
If Controls(0).HasControls Then

Dim tt As New TableCell
Dim Tbl As New
System.Web.UI.WebControls.Table
Dim TblRow As New
System.Web.UI.WebControls.TableRow
Dim TblCell As New TableCell

Dim MyCtrl As
System.Web.UI.WebControls.TableCell = Controls(0).Controls
(0).Controls(0)

tt.Controls.Add(l_DropDownlistPager)

Tbl.Controls.Add(TblRow)
TblRow.Controls.Add(MyCtrl)
TblRow.Controls.Add(tt)
TblCell.Controls.Add(Tbl)

TblRow.CssClass = CType(Controls
(0).Controls(0),
System.Web.UI.WebControls.TableRow).CssClass
CType(Controls(0).Controls(0),
System.Web.UI.WebControls.TableRow).CssClass = ""

TblCell.ColumnSpan = MyCtrl.ColumnSpan
MyCtrl.ColumnSpan = 0

Controls(0).Controls
(0).Controls.Remove(MyCtrl)
Controls(0).Controls(0).Controls.AddAt
(0, TblCell)
tt.HorizontalAlign > HorizontalAlign.Right


Tbl.BorderStyle = BorderStyle.Solid
Tbl.Width = New
System.Web.UI.WebControls.Unit("100%")

'Controls(0).Controls(0).Controls
(0).Controls.Add(CType(toto, System.Web.UI.Control))

End If
End If
End If

MyBase.RenderChildren(output)

End Sub


Private Sub SetDropDownListPager()
l_DropDownlistPager = New
System.Web.UI.WebControls.DropDownList
l_DropDownlistPager.Items.Add("20")
l_DropDownlistPager.Items.Add("50")
l_DropDownlistPager.Items.Add("100")
l_DropDownlistPager.Items.Add("200")
l_DropDownlistPager.AutoPostBack = True
End Sub



Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub


End Class




Pouvez-vous m'aider, ca fait 3 jours que je suis dessus,
et je n'ai plus d'idée ?

Merci de vos réponses.

Marc R


Avatar
Marc R
Désolé, ça ne marche pas mieux. C'est même pire, ma liste
déroulante n'est plus générée.

Marc
-----Message d'origine-----
Bonjour Marc,

Tu as testé le Controls.Add() dans la


fonction "protected override void
OnLoad(EventArgs e)" plustôt que dans le RenderChildren ?
Car le RenderChildren arrive trop tard pour gérer les


événements.
Bref tout ce que tu fais dans RenderChildren le faire


dans OnLoad.

--
Pierre Lagarde
Microsoft France

Marc R wrote:
Bonjour,

J'ai crée un contrôle serveur basé sur un datagrid,




dans
lequel je lui ai ajouté une liste déroulante dans la
section "pager" du contrôle, ceci dans le but d'agir




sur
la propriété "PageSize" du datagrid.

Pour cela, j'ai trifouillé la collection "controls" du
datagrid pour rajouter un "Dropdownlist" au bon




endroit.
J'ai ajouté également à mon dropdownlist des éléments
(20,50,100,200).
Jusque là tout va bien, ma liste déroulante s'affiche
bien avec ses éléments à l'intérieur, mais je n'arrive
absolument pas à intercepetr
l'évènement "SelectIndeChanged" de ma liste déroulante
dans mon datagrid.

Voici mon code :

Imports System.ComponentModel
Imports System.Web.UI
Imports System
Imports System.IO
Imports System.Web.UI.WebControls


<ToolboxData("<{0}:DataGrid runat=server></




{0}:DataGrid>")
Public Class DataGrid


Inherits System.Web.UI.WebControls.DataGrid

Private WithEvents l_DropDownlistPager As
System.Web.UI.WebControls.DropDownList

Public Sub New()

SetDropDownListPager()

End Sub



Protected Overrides Sub RenderChildren(ByVal output
As HtmlTextWriter)
If HasControls() Then
If HasControls() Then
If Controls(0).HasControls Then

Dim tt As New TableCell
Dim Tbl As New
System.Web.UI.WebControls.Table
Dim TblRow As New
System.Web.UI.WebControls.TableRow
Dim TblCell As New TableCell

Dim MyCtrl As
System.Web.UI.WebControls.TableCell = Controls




(0).Controls
(0).Controls(0)

tt.Controls.Add




(l_DropDownlistPager)

Tbl.Controls.Add(TblRow)
TblRow.Controls.Add(MyCtrl)
TblRow.Controls.Add(tt)
TblCell.Controls.Add(Tbl)

TblRow.CssClass = CType(Controls
(0).Controls(0),
System.Web.UI.WebControls.TableRow).CssClass
CType(Controls(0).Controls(0),
System.Web.UI.WebControls.TableRow).CssClass = ""

TblCell.ColumnSpan =




MyCtrl.ColumnSpan
MyCtrl.ColumnSpan = 0

Controls(0).Controls
(0).Controls.Remove(MyCtrl)
Controls(0).Controls




(0).Controls.AddAt
(0, TblCell)
tt.HorizontalAlign =
HorizontalAlign.Right


Tbl.BorderStyle = BorderStyle.Solid
Tbl.Width = New
System.Web.UI.WebControls.Unit("100%")

'Controls(0).Controls(0).Controls
(0).Controls.Add(CType(toto, System.Web.UI.Control))

End If
End If
End If

MyBase.RenderChildren(output)

End Sub


Private Sub SetDropDownListPager()
l_DropDownlistPager = New
System.Web.UI.WebControls.DropDownList
l_DropDownlistPager.Items.Add("20")
l_DropDownlistPager.Items.Add("50")
l_DropDownlistPager.Items.Add("100")
l_DropDownlistPager.Items.Add("200")
l_DropDownlistPager.AutoPostBack = True
End Sub



Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub


End Class




Pouvez-vous m'aider, ca fait 3 jours que je suis




dessus,
et je n'ai plus d'idée ?

Merci de vos réponses.

Marc R




.