Sélection dans DataTable et affichage dans TextBox [Résolu]

kdiDev 3 Messages postés jeudi 19 juillet 2012Date d'inscription 24 juillet 2012 Dernière intervention - 19 juil. 2012 à 16:55 - Dernière réponse : kdiDev 3 Messages postés jeudi 19 juillet 2012Date d'inscription 24 juillet 2012 Dernière intervention
- 24 juil. 2012 à 16:10
Bonjour,

J'ai une combobox qui reprend des données d'une DB Access. J'arrive à récupérer la valeur le mon identificateur (premier champs de ma base) mais je ne sais pas comment naviguer dans la dataTable pour faire en sorte que dès que je sélectionne quelque chose dans la combobox, les valeurs liées à cette selection s'affiche dans des champs text (ex: adresse, téléphone, etc...).

Je précise que ça ne fait que 3 jours que je travail avec ce langage donc je suis plus que débutante!

Voici mon code:

        // connexion à la base de donnée MS Access
        public DataTable connectDB(string requete,ref DataTable dt) {
            OleDbConnection conn;
            OleDbCommand cmd;
            OleDbDataAdapter da;
            DataSet ds = new DataSet();
            //DataTable dt = new DataTable();
            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\DB_Offertentool.accdb;Persist Security Info=True";

            conn = new OleDbConnection(strConn);
            conn.ConnectionString = strConn;
            conn.Open();

            cmd = conn.CreateCommand();
            da = new OleDbDataAdapter(requete, conn);
            ds.Reset();
            da.Fill(ds);
            dt = ds.Tables[0];

            conn.Close();

            return dt;
        }


        // initialisation d'une combobox
        private void chargementCbo(string request, ComboBox cboName, string display, ref DataTable dtSelected, string identificateur)
        {
            DataTable dTable = new DataTable();
            dTable = connectDB(request, ref dtSelected);
            cboName.DataSource = dTable;
            cboName.ValueMember = identificateur;
            cboName.DisplayMember = display;
            cboName.SelectedItem = null;
        }


        private void frmTeleHousing_Load(object sender, EventArgs e)
        {
            // initialisation de la combobox AM
            chargementCbo("SELECT AM_ID,AM_LastName,AM_FirstName FROM tblAM ORDER BY AM_LastName DESC, AM_FirstName ASC", cboAM, "AM_LastName",ref dtAM,"AM_ID");

            // initialisation de la combobox Telehousing
            chargementCbo("SELECT TH_ID,TH_Name FROM tblTH", cboTH, "TH_Name", ref dtTH,"TH_ID");

            // initialisation de la combobox connectivité
            chargementCbo("SELECT THConnectivity_ID,THConnectivity_Name FROM tblTHConnectivity", cboConnectivity, "THConnectivity_Name", ref dtConnectivity, "THConnectivity_ID");
        }

       
        // modification dans la combobox AM
        private void cboAM_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtPosition.Text = cboAM.SelectedValue.ToString();

            foreach (DataRow row in dtAM.Rows) {
                if (row["AM_ID"] == cboAM.SelectedValue)
                {
                    
                    //txtPosition.DataBindings.Add("Text",dv,"NAME");
                }
            }
        }


Si quelqu'un arrive à m'aider, j'en serais plus que ravie car là, je tourne en rond.

Merci d'avance...
Afficher la suite 

4 réponses

Répondre au sujet
Whismeril 11406 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 19 juil. 2012 à 19:43
+3
Utile
Bonsoir, tu peux te servir de l'objet databindingsource. Ici un tuto avec une List<T> comme source de données mais ça marche aussi avec une datatable


Whismeril
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Whismeril
soussous78 47 Messages postés mardi 21 novembre 2006Date d'inscription 5 novembre 2016 Dernière intervention - 19 juil. 2012 à 18:12
0
Utile
Salut,
Je ne sais pas comment est fait ton programme mais si tu utilises toujours la même base de données et que tu t'en sert tout le temps de ton logiciel, tu devrais t'y connecter dès le début de ton programme (constructeur) et la fermer à la fermeture de celui-ci (form_closing par exemple).

Sinon, es-ce cela répond a ton problème?
class blabla
{
    OleDbConnection conn;

    public blabla()
    {
        InitializeComponent();
        #region Ouverture de la dtbase
        string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data       Source=D:\\DB_Offertentool.accdb;Persist Security Info=True";
        conn = new OleDbConnection(strConn);
        conn.ConnectionString = strConn;
        conn.Open();
        #endregion
    }
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        conn.Close();
    }
    public DataTable Select(string requete)
    {
        OleDbCommand cmd;
        OleDbDataAdapter da;
        DataSet ds = new DataSet();

        cmd = conn.CreateCommand();
        da = new OleDbDataAdapter(requete, conn);
        ds.Reset();
        da.Fill(ds);
        return ds.Tables[0];
    }
    private void frmTeleHousing_Load(object sender, EventArgs e)
    {
        // initialisation de la combobox AM
        chargementCbo("SELECT AM_ID,AM_LastName,AM_FirstName FROM tblAM ORDER BY AM_LastName DESC, AM_FirstName ASC", cboAM, "AM_LastName", "AM_ID");

        // initialisation de la combobox Telehousing
        chargementCbo("SELECT TH_ID,TH_Name FROM tblTH", cboTH, "TH_Name", "TH_ID");

        // initialisation de la combobox connectivité
        chargementCbo("SELECT THConnectivity_ID,THConnectivity_Name FROM tblTHConnectivity", cboConnectivity, "THConnectivity_Name", "THConnectivity_ID");
    }
    private void chargementCbo(string request, ComboBox cboName, string display, string identificateur)
    {
        DataTable dTable = new DataTable();
        dTable = Select(request);
        cboName.DataSource = dTable;
        cboName.ValueMember = identificateur;
        cboName.DisplayMember = display;
        cboName.SelectedItem = null;
    }
    private void cboAM_SelectedIndexChanged(object sender, EventArgs e)
    {
        txtPosition.Text = cboAM.SelectedValue.ToString();

        DataTable dt = (DataTable)cboAM.DataSource;
        string index = dt.Rows[cboAM.SelectedIndex][cboAM.ValueMember].ToString();

        DataRow dr = Select("select * from tblAM where AM_ID='" + index + "'").Rows[0];

        TextBox1.text = dr[0].ToString();
        TextBox2.text = dr[1].ToString();
        TextBox3.text = dr[2].ToString();
        ...
    }
}
Commenter la réponse de soussous78
kdiDev 3 Messages postés jeudi 19 juillet 2012Date d'inscription 24 juillet 2012 Dernière intervention - 19 juil. 2012 à 21:29
0
Utile
Merci beaucoup pour ces réponse rapide! Je vais tester tout ça demain. C'est effectivement préférable pour l'accès à la dB je pense. Et je vais regarder le titi.

Merci encore et bonne soirée
Commenter la réponse de kdiDev
kdiDev 3 Messages postés jeudi 19 juillet 2012Date d'inscription 24 juillet 2012 Dernière intervention - 24 juil. 2012 à 16:10
0
Utile
Bonjour Whismeril,

Après quelques jours de vacances, je me suis remise à mon apprentissage C#. J'ai regarder le code que tu m'as envoyé, mais je n'y arrive toujours pas. Je pense que j'ai encore trop de lacune sur le sujet pour bien comprendre mais du coup, je n'avance pas et tourne en rond :-(.

J'ai lu plusieurs documents et voici l'explication la plus complète que je peux donner actuellement concernant mon problème.

J'ai donc accès à ma base de donnée. J'arrive à remplir ma datatable. Mais du coup, ce que j'aimerais faire de manière spontanée, c'est faire une requête à ma datatable (ou une boucle de lecture qui sélectionne ce que je désire) en fonction de ce qui a été sélectionner dans ma combobox. Le but étant d'afficher les données liées à cette sélection dans différents textbox.

Désolée de t'embêtre avec ça, mais je suis certaine que tu arriveras à m'aider.
Commenter la réponse de kdiDev

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.