SelectedIndex dans une dropdownlist (en asp.net C#) [Résolu]

bihannic_fr2000 8 Messages postés vendredi 3 mars 2006Date d'inscription 22 mars 2006 Dernière intervention - 21 mars 2006 à 10:29 - Dernière réponse : bihannic_fr2000 8 Messages postés vendredi 3 mars 2006Date d'inscription 22 mars 2006 Dernière intervention
- 22 mars 2006 à 09:59
Bonjour,

Je realise une datagrid au sein de laquelle je fais apparaitre un dropdownlist en mode edititemtemplate.
Quand je passe en mode edit j aimerais qu'il me sélectionne la bonne valeur et pas la premiere de la liste.
Pour ce faire dans le code asp je met:
SelectedIndex= '<%# GetSelectedIndex(DataBinder.Eval(Container.DataItem, "STATDSI_ID").ToString()) %>'

Par contre je galère pour le code behind en C#.
J'ai visité plein de forum met tout est en VB.

Merci pour votre aide.

Code ASP :



<%# DataBinder.Eval(Container.DataItem, "STATDSI_LIBELLE") %>

<EditItemTemplate>
'</gras> OnSelectedIndexChanged ="ddlSTATUT_SelectedIndexChanged" DataValueField="STATDSI_ID" DataTextField="STATDSI_LIBELLE" DataSource="<%# ddlSTATUTLoad() %>" />
</EditItemTemplate>

Matériel"> <%# DataBinder.Eval(Container.DataItem, "STATDSI_LIBELLE") %> <EDITITEMTEMPLATE>" DataTextField ="STATDSI_LIBELLE" DataValueField= "STATDSI_ID" OnSelectedIndexChanged="ddlSTATUT_SelectedIndexChanged" SelectedIndex='<%# GetSelectedIndex(DataBinder.Eval(Container.DataItem, "STATDSI_ID").ToString()) %>' AutoPostBack="True" runat="server"></EDITITEMTEMPLATE>Matériel"> <%# DataBinder.Eval(Container.DataItem, "STATDSI_LIBELLE") %> <EDITITEMTEMPLATE>" DataTextField ="STATDSI_LIBELLE" DataValueField= "STATDSI_ID" OnSelectedIndexChanged="ddlSTATUT_SelectedIndexChanged" SelectedIndex='<%# GetSelectedIndex(DataBinder.Eval(Container.DataItem, "STATDSI_ID").ToString()) %>' AutoPostBack="True" runat="server"></EDITITEMTEMPLATE>Matériel"> <%# DataBinder.Eval(Container.DataItem, "STATDSI_LIBELLE") %> <EDITITEMTEMPLATE>" DataTextField ="STATDSI_LIBELLE" DataValueField="STATDSI_ID" OnSelectedIndexChanged="ddlSTATUT_SelectedIndexChanged" SelectedIndex='<%# GetSelectedIndex(DataBinder.Eval(Container.DataItem, "STATDSI_ID").ToString()) %>' AutoPostBack="True" runat="server">

Code BEHIN (C#) (qui ne marche pas )

protected int GetSelectedIndex(string STATDSI_ID)
{


int iLoop=0;
try
{
iLoop=Convert.ToInt16(ddlSTATUT.Items.IndexOf(ddlSTATUT.Items.FindByValue(STATDSI_ID)));
}
catch(Exception l_Exception)
{
Console.WriteLine(l_Exception.ToString());
}


return iLoop;


}
Afficher la suite 

3 réponses

Répondre au sujet
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 21 mars 2006 à 13:38
+3
Utile
bonjour,

Il y a un truc que je ne comprend pas, pourquoi ne set tu pas le selecteditem lorsque tu bind le controle ? à mon avis c'est la le problème.

A ta place je m'abonnerais à l'evenement item_databound du datagrid je rechercherais le controle avec e.item.findcontrol et je setterais le selectedindex :)

voir aussi mon tuto : http://www.aspfr.com/tutoriaux/DEBUG-ASP-NET-AVEC-VISUAL-STUDIO_384.aspx :)


<HR>
Cyril - MVS - MCP ASP
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jesusonline
bihannic_fr2000 8 Messages postés vendredi 3 mars 2006Date d'inscription 22 mars 2006 Dernière intervention - 22 mars 2006 à 09:59
+3
Utile
OKI merci jesus en fait j'ai reconstruit mon itemdataboud en requetant a cet endroit ma BD pour y extraire les données.

Merci beaucoup

Pour ceux qui cherchent encore:



private
void dgQuitus_ItemDataBound(
object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)


{



if(e.Item.ItemType == ListItemType.EditItem)


{


DropDownList ddl = (DropDownList)e.Item.FindControl("ddlSTATUT");



//Ouverture connexion à la base GEF


OracleConnection oOracleConn =
new OracleConnection ();


oOracleConn.ConnectionString = ConfigurationSettings.AppSettings.Get("GEF_connectionstring");


oOracleConn.Open();


OracleCommand myCommand = oOracleConn.CreateCommand();



//Commande de selection des statut materiel


myCommand.CommandText="select 0 as STATDSI_ID,'' as STATDSI_LIBELLE from dual union select STATDSI_ID,STATDSI_LIBELLE FROM PARAM_STAT_MAT_DSI ORDER BY STATDSI_ID";


System.Data.OracleClient.OracleDataAdapter daSTATUT =
new OracleDataAdapter(myCommand);


ddl.DataSource = myCommand.ExecuteReader();


ddl.DataTextField = "STATDSI_LIBELLE";


ddl.DataValueField = "STATDSI_ID";


ddl.DataBind();



//fermeture ORACLE


oOracleConn.Close();



//selection du bon STATUT



int currentSTATUTID = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "STATDSI_ID"));


ListItem li = ddl.Items.FindByValue(currentSTATUTID.ToString());


if (li !null) li.Selected
true;


}


}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de bihannic_fr2000
bihannic_fr2000 8 Messages postés vendredi 3 mars 2006Date d'inscription 22 mars 2006 Dernière intervention - 21 mars 2006 à 16:47
0
Utile
Salut jesusonline,

J'ai suivi des conseil et utilisé l'évenement item_databoud du datagrid...
tout est Ok a la compil mais error a l 'affichage:
La référence d'objet n'est pas définie à une instance d'un objet.


Merci aux yeux experts qui trouveront ma bourde en un clin d'oeil

CODE ASPX:

J'ai viré l'appelle a la fonction de remplissage


<%# DataBinder.Eval(Container.DataItem, "STATDSI_LIBELLE") %>

<EditItemTemplate>

</EditItemTemplate>


CODE BEHIND:

Je recherche le controle et je remplis la ddl, et select l index...

private void dgQuitus_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{


//selectindex pour la ddl STATUT


DataList dl = (DataList)sender;
if(e.Item.ItemType == ListItemType.EditItem)
{
DropDownList ddl = (DropDownList)e.Item.FindControl("ddlSTATUT");
ddl.DataSource = ddlSTATUTLoad();
ddl.DataTextField = "STATDSI_LIBELLE";
ddl.DataValueField = "STATDSI_ID";
ddl.DataBind();
ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue("STATDSI_ID"));
}


}


public object ddlSTATUTLoad()
{
// Remplissage ddl Nom Prenom
//Ouverture connexion à la base LEAD
OracleConnection oOracleConn = new OracleConnection ();
oOracleConn.ConnectionString = ConfigurationSettings.AppSettings.Get("GEF_connectionstring");
oOracleConn.Open();


OracleCommand myCommand = oOracleConn.CreateCommand();
try
{
System.Data.DataSet dsSTATUT = new System.Data.DataSet();
//myCommand.CommandText="SELECT STATDSI_ID,STATDSI_LIBELLE FROM PARAM_STAT_MAT_DSI ORDER BY STATDSI_LIBELLE";
myCommand.CommandText="select 0 as STATDSI_ID,'' as STATDSI_LIBELLE from dual union select STATDSI_ID,STATDSI_LIBELLE FROM PARAM_STAT_MAT_DSI ORDER BY STATDSI_ID";
System.Data.OracleClient.OracleDataAdapter daSTATUT = new OracleDataAdapter(myCommand);
daSTATUT.Fill(dsSTATUT,"Statut");
return dsSTATUT;
}
catch(Exception l_Exception)
{
Console.WriteLine(l_Exception.ToString());
return null;
}
finally
{
oOracleConn.Close();
}
}
Commenter la réponse de bihannic_fr2000

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.