JB60130
Messages postés2Date d'inscriptionmardi 29 janvier 2008StatutMembreDernière intervention30 janvier 2008
-
29 janv. 2008 à 16:44
JB60130
Messages postés2Date d'inscriptionmardi 29 janvier 2008StatutMembreDernière intervention30 janvier 2008
-
30 janv. 2008 à 11:54
Bonjour à tous,
Je travaille actuellement sur une application Windows et j'ai cinq combobox (Client,Produit, Pièce...) à remplir et à liés en cascade c'est à dire lorsque je sélectionne un Client dan mon premier combo je ne dois voir apparaitre dans le combo suivant que les produits concernant ce Client et ainsi de suite. J'espère que ce n'est pas trop flou ???
Pour cela :
- Je creer une procedure que j'appellerai sur l'evenement SelectedIndexChanged de mon Combo
- Dans cette procédure je creer ma connexion et je l'ouvre
- Ensuite voila ce que je fais :
SqlDataAdapter SqlDA;
SqlCommand SqlCmd;
DataTable SqlTable;
// Récupération de l'ID du Client sélectionné dans la liste précédente
idCli = cboxClient.SelectedValue.ToString();
SqlTable =
new
DataTable
(
"TEST"
);
SqlCmd =
new
SqlCommand
(
"Select distinct(T_DEV_PRODUIT.ID),T_DEV_PRODUIT.LIBELLE FROM T_DEV_PRODUIT WHERE T_DEV_PRODUIT.ID_CLIENT = "
+ idCli ,
maConnexion);SqlDA =
new
SqlDataAdapter
(SqlCmd);SqlDA.Fill(SqlTable);
cboxProduit.DataSource = SqlTable;
cboxProduit.ValueMember =
"ID"
;
//Sa c'est le champs clé
cboxProduit.DisplayMember=
"LIBELLE"
;
//Sa c'est la valeur affichée
Jusqu'ici tout se passe bien, je fais exactement la meme manipulation pour remplir le combo Pièce à partir de l'ID du produit récupéré mais lorsque je fais : idProd = cboxProduit.SelectedValue.ToString();
j'ai le droit à la jolie erreur : "Une référence d'objet n'est pas définie à une instance d'un objet" mais c'est un string et il n'y a pas lieu de l'instancier meme si je l'initialise à rien cela ne fonctionne pas. J'aimerais savoir comment récupérer l'ID dans ma base (SQL Server 2005 Express) de la valeur sélectionnée dans le combo produit SVP AU SECOURS !!!!
Si quelqu'un à une solution ou un autre moyen de filtrer mes combos en cascadeje suis preneur.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 29 janv. 2008 à 22:20
Vraisemblablement que SelectedValue est null, donc si tu appelles toString dessus, ça coince...
Autre remarque, pour les requêtes paramétrées, jettes un oeil ici:
JB60130
Messages postés2Date d'inscriptionmardi 29 janvier 2008StatutMembreDernière intervention30 janvier 2008 30 janv. 2008 à 11:54
Merci pour ton aide, j'ai essayé d'utiliser les requêtes paramétrées car en effet le code est plus sûr et je trouve cela plus propre. Maintenant le SelectedValue renvoie System.Data.DataRowView donc sa valeur est null.
Voici mon code :
public
void FiltreProduit(){
string maChaine =
"//Ici se trouve ma chaine de connexion";
SqlConnection maConnexion =
new
SqlConnection(maChaine);
//Préparation des paramètres
SqlParameter paramID =
new
SqlParameter(
"@id",
SqlDbType.BigInt);paramID.Value = cboxClient.SelectedValue;
MessageBox.Show(
"Valeur du paramètre :" + paramID.Value); // La valeur renvoyée ici est la bonne car mon premier combo(cboxClient) est rempli directement par le gestionnaire des Tâches de VS 2005
//Préparation de la commande
String sql =
string.Format(
"Select distinct(T_DEV_PRODUIT.ID),T_DEV_PRODUIT.LIBELLE FROM T_DEV_PRODUIT WHERE T_DEV_PRODUIT.ID_CLIENT = @id",paramID.ParameterName);
SqlCommand cmd =
new
SqlCommand(sql.ToString(), maConnexion);
//Ajout des paramètre à la commandecmd.Parameters.Add(paramID);
//Ouverture de la connection et exécution de la commandemaConnexion.Open();
SqlDataAdapter SqlDA;
DataTable SqlTable;
SqlTable =
new
DataTable(
"TEST");SqlDA =
new
SqlDataAdapter(cmd);SqlDA.Fill(SqlTable);
cboxProduit.DataSource = SqlTable;
cboxProduit.ValueMember =
"ID";
//Cela c'est ton champs clécboxProduit.DisplayMember=
"LIBELLE";
//Cela c'est le text"
}
Cela fonctionne normalement mais je voudrais savoir si le fait de remplir mon combo(cboxProduit) de la façon décrite ci-dessus ne m'empeche pas de pouvoir récupérer la valeur sélectionnée??
Sinon je fais cela ensuite :
public
void FiltrePiece()
{
string maChaine =
"//Ici se trouve ma chaine de connexion";
SqlConnection maConnexion =
new
SqlConnection(maChaine);
//Préparation des paramètres
SqlParameter paramID =
new
SqlParameter(
"@id",
SqlDbType.BigInt);paramID.Value = cboxProduit.SelectedValue; // C'est ici que je n'arrive pas à sélectionner la valeur
MessageBox.Show(
"Valeur du paramètre :" + paramID.Value);
//Préparation de la commande
String sql =
string.Format(
"Select DISTINCT(T_DEV_PIECE.ID),T_DEV_PIECE.LIBELLE FROM T_DEV_PIECE,T_DEV_PRODUIT WHERE T_DEV_PIECE.ID_PRODUIT = @id",paramID.ParameterName);
SqlCommand cmd =
new
SqlCommand(sql.ToString(), maConnexion);
//Ajout des paramètre à la commandecmd.Parameters.Add(paramID);
//Ouverture de la connection et exécution de la commandemaConnexion.Open();
SqlDataAdapter SqlDA;
DataTable SqlTable;SqlTable =
new
DataTable(
"TEST");SqlDA =
new
SqlDataAdapter(cmd);SqlDA.Fill(SqlTable);
cboxPiece.DataSource = SqlTable;
cboxPiece.ValueMember =
"ID";
//Cela c'est le champs clécboxPiece.DisplayMember =
"LIBELLE";
//Cela c'est le text"}
J'avais essayé avant d'utiliser un dataAdapter et un dataTable d'utiliser un dataReader mais sans résultat non plus. Donc concretement comment récupérer cette valeur sélectionnée dans le combo (cboxProduit)??
J'espère avoir été clair et je suis désolé si ce n'est pas le cas.
Merci de m'apporter votre aide svp si vous en avez le pouvoir