Récupération d'une valeur gridview pour afficher un message
floriian02
-
11 mars 2013 à 09:27
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 2016
-
3 juil. 2015 à 21:37
Bonjour à tous,
alors voilà, je vous explique mon soucis. En fait j'ai une gridview, qui contient des éléments donc un "ID". Ce que j'aimerai faire, c'est de récupérer l'ID pour pouvoir afficher le message corresponsant à l'ID dans un label. Mais pas moyen, je ne trouve pas la solution.. =/.
Je vous mets le code ci-dessous :
le code aspx :
<%-- ID de la demande --%>
'>
le code c#:
protected void GridDonnees_RowDataBound(object sender, GridViewRowEventArgs e)
{
Label lbSuivi = (Label)GridDonnees.FindControl("NumSuivi");
//Mise en place de la connexion
SqlConnection MyConnect = new SqlConnection();
string ConnectStr = @"Data Source=BILOUTE;Initial Catalog=Intranet_New; User ID=New_Intranet_User; Password=abcdef";
MyConnect.ConnectionString = ConnectStr;
//Mise en place de la commande
SqlCommand MyCmd = new SqlCommand();
MyCmd.Connection = MyConnect;
MyCmd.CommandType = CommandType.Text;
MyCmd.CommandText = " SELECT Message FROM SuiviFormulaire WHERE idSuivi=@idSuivi";
MyCmd.Parameters.Add("@idSuivi", SqlDbType.Int).Value = lbSuivi.Text;
MyConnect.Open();
SqlDataReader MyReader = MyCmd.ExecuteReader();
if (MyReader.HasRows)
{
MyReader.Read();
LabelMessage.Text = MyReader.GetString(0);
}
MyReader.Close();
MyConnect.Close();
}
ne te donnera jamais ce que tu veux.
RowDataBound est exécutée a chaque "Bind" d'une ligne du grid à la source de données.
Tu dois utiliser le paramètre fourni pour trouver ta donnée ! Et pas le grid lui même !
e.FindControl("NumSuivi");
//ou
e.Cells[0].Text;
de plus avec ce code,
si ton grid ramène 20 lignes, tu vas écrire 20 fois les valeurs correspondantes et ne voir que la dernière.
tu peux toujours faire ceci :