OVH Cloud OVH Cloud

Dropdownlist en edit mode

6 réponses
Avatar
PATRICE A. BONNEFOY
Bonjour,
J'ai créé un Datagrid contenant un DDL qui fonctionne parfaitement en
création, modif...
Par contre, je voudrais que la liste du DDL soit sélectionnée sur
l'enregistrement courant. ( Lorsque l'enregistrement s'ouvre en modification,
le DDL montre le 1er élément de la liste... )
Et je ne sais pas faire cela.
Le DDL est basé sur une table indépendante de référence dont un champ du DDL
remplit le champ correspondant d'une autre table sur lequel est "branché" le
Datagrid.
Pouvez-vous m'aider ? Merci à tous.
PAB.

6 réponses

Avatar
Eric
private void DataGrid_ItemDataBound(..)
{
ListItemType lt = e.Item.ItemType;
if (lt == ListItemType.Item || lt == ListItemType.AlternatingItem)
{
// Set DropDownList Selected
DropDownList ddl =((DropDownList)e.Item.FindControl("Dropdownlist"));
DataRowView drv=(DataRowView)e.Item.DataItem;
ddl.SelectedIndex = drv["id_du_datagrid_qui_correspond_a_celui_du_ddl"];
}

ça te convient?


"PATRICE A. BONNEFOY" a écrit :

Bonjour,
J'ai créé un Datagrid contenant un DDL qui fonctionne parfaitement en
création, modif...
Par contre, je voudrais que la liste du DDL soit sélectionnée sur
l'enregistrement courant. ( Lorsque l'enregistrement s'ouvre en modification,
le DDL montre le 1er élément de la liste... )
Et je ne sais pas faire cela.
Le DDL est basé sur une table indépendante de référence dont un champ du DDL
remplit le champ correspondant d'une autre table sur lequel est "branché" le
Datagrid.
Pouvez-vous m'aider ? Merci à tous.
PAB.


Avatar
PATRICE A. BONNEFOY
Merci Eric pour ton code. Je l'ai donc testé mais avant tout transformé en VB
car ma page est en VB.
Je rencontre l'erreur de casting suivante sur la ligne 332 :
Exception Details: System.InvalidCastException: Unable to cast object of
type 'System.Data.Common.DbDataRecord' to type
'System.Data.DataRowView'.
Source Error:
Line 330: ' Set DropDownList Selected
Line 331: Dim ddl As DropDownList = CType(e.Item.FindControl("nomProduit"),
DropDownList)
Line 332: Dim drv As DataRowView = CType(e.Item.DataItem, DataRowView)
Line 333: ddl.SelectedIndex = drv("DetailsGrid")
Line 334: End If

Peux-tu m'aider de nouveau ? Merci encore.
Patrice.

"Eric" a écrit :

private void DataGrid_ItemDataBound(..)
{
ListItemType lt = e.Item.ItemType;
if (lt == ListItemType.Item || lt == ListItemType.AlternatingItem)
{
// Set DropDownList Selected
DropDownList ddl =((DropDownList)e.Item.FindControl("Dropdownlist"));
DataRowView drv=(DataRowView)e.Item.DataItem;
ddl.SelectedIndex = drv["id_du_datagrid_qui_correspond_a_celui_du_ddl"];
}

ça te convient?


"PATRICE A. BONNEFOY" a écrit :

> Bonjour,
> J'ai créé un Datagrid contenant un DDL qui fonctionne parfaitement en
> création, modif...
> Par contre, je voudrais que la liste du DDL soit sélectionnée sur
> l'enregistrement courant. ( Lorsque l'enregistrement s'ouvre en modification,
> le DDL montre le 1er élément de la liste... )
> Et je ne sais pas faire cela.
> Le DDL est basé sur une table indépendante de référence dont un champ du DDL
> remplit le champ correspondant d'une autre table sur lequel est "branché" le
> Datagrid.
> Pouvez-vous m'aider ? Merci à tous.
> PAB.


Avatar
Eric
Je suis sec... Tu es sur que ton e est bien l'argument
System.Web.UI.WebControls.DataListItemEventArgs de la méthode
DataGrid_ItemDataBound? Et d'avoir au préalable filtré ton e.Item selon son
type 5Item ou AlternatingItem?)
Désolé de ne pas pourvoir t'aider plus...

"PATRICE A. BONNEFOY" a écrit :

Merci Eric pour ton code. Je l'ai donc testé mais avant tout transformé en VB
car ma page est en VB.
Je rencontre l'erreur de casting suivante sur la ligne 332 :
Exception Details: System.InvalidCastException: Unable to cast object of
type 'System.Data.Common.DbDataRecord' to type
'System.Data.DataRowView'.
Source Error:
Line 330: ' Set DropDownList Selected
Line 331: Dim ddl As DropDownList = CType(e.Item.FindControl("nomProduit"),
DropDownList)
Line 332: Dim drv As DataRowView = CType(e.Item.DataItem, DataRowView)
Line 333: ddl.SelectedIndex = drv("DetailsGrid")
Line 334: End If

Peux-tu m'aider de nouveau ? Merci encore.
Patrice.

"Eric" a écrit :

> private void DataGrid_ItemDataBound(..)
> {
> ListItemType lt = e.Item.ItemType;
> if (lt == ListItemType.Item || lt == ListItemType.AlternatingItem)
> {
> // Set DropDownList Selected
> DropDownList ddl =((DropDownList)e.Item.FindControl("Dropdownlist"));
> DataRowView drv=(DataRowView)e.Item.DataItem;
> ddl.SelectedIndex = drv["id_du_datagrid_qui_correspond_a_celui_du_ddl"];
> }
>
> ça te convient?
>
>
> "PATRICE A. BONNEFOY" a écrit :
>
> > Bonjour,
> > J'ai créé un Datagrid contenant un DDL qui fonctionne parfaitement en
> > création, modif...
> > Par contre, je voudrais que la liste du DDL soit sélectionnée sur
> > l'enregistrement courant. ( Lorsque l'enregistrement s'ouvre en modification,
> > le DDL montre le 1er élément de la liste... )
> > Et je ne sais pas faire cela.
> > Le DDL est basé sur une table indépendante de référence dont un champ du DDL
> > remplit le champ correspondant d'une autre table sur lequel est "branché" le
> > Datagrid.
> > Pouvez-vous m'aider ? Merci à tous.
> > PAB.


Avatar
Rahan
si ca peu t aider c ce que j utilise en vb !
dans le itemdatabound demon dg
Case ListItemType.EditItem
Dim cmb As DropDownList
Dim drv As DataRowView = CType
(e.Item.DataItem, DataRowView)
Dim Jour1 As String = CType(drv
("JourDepart"), String)
Dim Jour2 As String = CType(drv
("JourRetour"), String)
Dim Sem As String = CType(drv
("SemRetour"), String)
'selectionne par defaut les jours
cmb = CType(e.Item.FindControl("cmb1"),
DropDownList)
cmb.SelectedIndex = cmb.Items.IndexOf
(cmb.Items.FindByValue(Jour1))
cmb = CType(e.Item.FindControl("cmb2"),
DropDownList)
cmb.SelectedIndex = cmb.Items.IndexOf
(cmb.Items.FindByValue(Jour2))
cmb = CType(e.Item.FindControl("cmb3"),
DropDownList)
cmb.SelectedIndex = cmb.Items.IndexOf
(cmb.Items.FindByText(Sem))
End Select

A+

-----Message d'origine-----
Bonjour,
J'ai créé un Datagrid contenant un DDL qui fonctionne


parfaitement en
création, modif...
Par contre, je voudrais que la liste du DDL soit


sélectionnée sur
l'enregistrement courant. ( Lorsque l'enregistrement


s'ouvre en modification,
le DDL montre le 1er élément de la liste... )
Et je ne sais pas faire cela.
Le DDL est basé sur une table indépendante de


référence dont un champ du DDL
remplit le champ correspondant d'une autre table sur


lequel est "branché" le
Datagrid.
Pouvez-vous m'aider ? Merci à tous.
PAB.
.



Avatar
PATRICE A. BONNEFOY
Merci Eric et "Rahan",
J'essaie ce code et je vous en dis plus.
Patrice.

"Rahan" a écrit :

si ca peu t aider c ce que j utilise en vb !
dans le itemdatabound demon dg
Case ListItemType.EditItem
Dim cmb As DropDownList
Dim drv As DataRowView = CType
(e.Item.DataItem, DataRowView)
Dim Jour1 As String = CType(drv
("JourDepart"), String)
Dim Jour2 As String = CType(drv
("JourRetour"), String)
Dim Sem As String = CType(drv
("SemRetour"), String)
'selectionne par defaut les jours
cmb = CType(e.Item.FindControl("cmb1"),
DropDownList)
cmb.SelectedIndex = cmb.Items.IndexOf
(cmb.Items.FindByValue(Jour1))
cmb = CType(e.Item.FindControl("cmb2"),
DropDownList)
cmb.SelectedIndex = cmb.Items.IndexOf
(cmb.Items.FindByValue(Jour2))
cmb = CType(e.Item.FindControl("cmb3"),
DropDownList)
cmb.SelectedIndex = cmb.Items.IndexOf
(cmb.Items.FindByText(Sem))
End Select

A+

>-----Message d'origine-----
>Bonjour,
>J'ai créé un Datagrid contenant un DDL qui fonctionne
parfaitement en
>création, modif...
>Par contre, je voudrais que la liste du DDL soit
sélectionnée sur
>l'enregistrement courant. ( Lorsque l'enregistrement
s'ouvre en modification,
>le DDL montre le 1er élément de la liste... )
>Et je ne sais pas faire cela.
>Le DDL est basé sur une table indépendante de
référence dont un champ du DDL
>remplit le champ correspondant d'une autre table sur
lequel est "branché" le
>Datagrid.
>Pouvez-vous m'aider ? Merci à tous.
>PAB.
>.
>



Avatar
PATRICE A. BONNEFOY
Voici ma procédure :
Private Sub DG_ItemDataBound(ByVal s As Object, ByVal e As
DataGridItemEventArgs)
Dim Connection As SqlConnection
Dim SQL As String = "SELECT Produits.PDT_ID_PRODUIT,
Produits.PDT_NOM, (Categories.TYP_NOM + ' / ' + Produits.PDT_NOM) " & _
"As NomVin FROM Categories INNER JOIN Produits ON
Categories.TYP_ID_CAT = " & _
"Produits.PDT_CODE_CAT ORDER BY PDT_NOM"
Connection = New SqlConnection(strConnect)
Connection.Open()
Dim Comm As New SqlCommand()
Comm.CommandText = SQL

If e.Item.ItemType = ListItemType.EditItem Then
Dim ddlProductName As DropDownList
Dim drv As DataRowView = CType(e.Item.DataItem, DataRowView)

ddlProductName = CType(e.Item.FindControl("nomProduit"),
DropDownList)
ddlProductName.DataSource =
Comm.ExecuteReader(CommandBehavior.CloseConnection)
ddlProductName.DataBind()
ddlProductName.Items.Insert(0, "Sélectionnez un produit")
ddlProductName.Items.FindByText("Sélectionnez un produit").Value
= 0
Dim currValue As String = CType(drv("PDT_NOM"), String)
ddlProductName = CType(e.Item.FindControl("nomProduit"),
DropDownList)
ddlProductName.SelectedIndex =
ddlProductName.Items.IndexOf(ddlProductName.Items.FindByValue(currValue))
End If
End Sub

Cependant, j'ai une erreur de casting sur la ligne 333 :
Unable to cast object of type 'System.Data.Common.DbDataRecord' to type
'System.Data.DataRowView'.

Line 331: If e.Item.ItemType = ListItemType.EditItem Then
Line 332: Dim ddlProductName As DropDownList
Line 333: Dim drv As DataRowView = CType(e.Item.DataItem,
DataRowView)
Line 334:
Line 335: ddlProductName =
CType(e.Item.FindControl("nomProduit"), DropDownList)

Merci encore de votre aide.
Patrice.

"PATRICE A. BONNEFOY" a écrit :

Merci Eric et "Rahan",
J'essaie ce code et je vous en dis plus.
Patrice.

"Rahan" a écrit :

> si ca peu t aider c ce que j utilise en vb !
> dans le itemdatabound demon dg
> Case ListItemType.EditItem
> Dim cmb As DropDownList
> Dim drv As DataRowView = CType
> (e.Item.DataItem, DataRowView)
> Dim Jour1 As String = CType(drv
> ("JourDepart"), String)
> Dim Jour2 As String = CType(drv
> ("JourRetour"), String)
> Dim Sem As String = CType(drv
> ("SemRetour"), String)
> 'selectionne par defaut les jours
> cmb = CType(e.Item.FindControl("cmb1"),
> DropDownList)
> cmb.SelectedIndex = cmb.Items.IndexOf
> (cmb.Items.FindByValue(Jour1))
> cmb = CType(e.Item.FindControl("cmb2"),
> DropDownList)
> cmb.SelectedIndex = cmb.Items.IndexOf
> (cmb.Items.FindByValue(Jour2))
> cmb = CType(e.Item.FindControl("cmb3"),
> DropDownList)
> cmb.SelectedIndex = cmb.Items.IndexOf
> (cmb.Items.FindByText(Sem))
> End Select
>
> A+
>
> >-----Message d'origine-----
> >Bonjour,
> >J'ai créé un Datagrid contenant un DDL qui fonctionne
> parfaitement en
> >création, modif...
> >Par contre, je voudrais que la liste du DDL soit
> sélectionnée sur
> >l'enregistrement courant. ( Lorsque l'enregistrement
> s'ouvre en modification,
> >le DDL montre le 1er élément de la liste... )
> >Et je ne sais pas faire cela.
> >Le DDL est basé sur une table indépendante de
> référence dont un champ du DDL
> >remplit le champ correspondant d'une autre table sur
> lequel est "branché" le
> >Datagrid.
> >Pouvez-vous m'aider ? Merci à tous.
> >PAB.
> >.
> >
>