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

Signaler
Messages postés
8
Date d'inscription
vendredi 3 mars 2006
Statut
Membre
Dernière intervention
22 mars 2006
-
Messages postés
8
Date d'inscription
vendredi 3 mars 2006
Statut
Membre
Dernière intervention
22 mars 2006
-
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;


}

3 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
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
Messages postés
8
Date d'inscription
vendredi 3 mars 2006
Statut
Membre
Dernière intervention
22 mars 2006

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;


}


}
Messages postés
8
Date d'inscription
vendredi 3 mars 2006
Statut
Membre
Dernière intervention
22 mars 2006

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();
}
}