Sélection dans DataTable et affichage dans TextBox

Résolu
kdiDev Messages postés 3 Date d'inscription jeudi 19 juillet 2012 Statut Membre Dernière intervention 24 juillet 2012 - 19 juil. 2012 à 16:55
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...
A voir également:

4 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
19 juil. 2012 à 19:43
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
3
soussous78 Messages postés 47 Date d'inscription mardi 21 novembre 2006 Statut Membre Dernière intervention 5 novembre 2016
19 juil. 2012 à 18:12
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();
        ...
    }
}
0
kdiDev Messages postés 3 Date d'inscription jeudi 19 juillet 2012 Statut Membre Dernière intervention 24 juillet 2012
19 juil. 2012 à 21:29
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
0
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 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.
0
Rejoignez-nous