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

Messages postés
3
Date d'inscription
jeudi 19 juillet 2012
Statut
Membre
Dernière intervention
24 juillet 2012
- - Dernière réponse : kdiDev
Messages postés
3
Date d'inscription
jeudi 19 juillet 2012
Statut
Membre
Dernière intervention
24 juillet 2012
- 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

Meilleure réponse
Messages postés
13584
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 août 2019
294
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Whismeril
Messages postés
47
Date d'inscription
mardi 21 novembre 2006
Statut
Membre
Dernière intervention
5 novembre 2016
0
Merci
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
Messages postés
3
Date d'inscription
jeudi 19 juillet 2012
Statut
Membre
Dernière intervention
24 juillet 2012
0
Merci
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
Messages postés
3
Date d'inscription
jeudi 19 juillet 2012
Statut
Membre
Dernière intervention
24 juillet 2012
0
Merci
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