Boucle champ table dans textbox

Résolu/Fermé
Jaber_ Messages postés 23 Date d'inscription dimanche 17 juillet 2016 Statut Membre Dernière intervention 23 novembre 2016 - Modifié par Jaber_ le 5/08/2016 à 19:22
Jaber_ Messages postés 23 Date d'inscription dimanche 17 juillet 2016 Statut Membre Dernière intervention 23 novembre 2016 - 9 août 2016 à 11:01
Bonjour à tous !

Voilà, j'essaie d'afficher dans un champ text multiligne les éléments d'un champ d'une table et le code ci-dessous ne m'affiche que le premier enregistrement...
Pouvez-vous m'aider svp ?
            MySqlDataAdapter Notif = new MySqlDataAdapter("SELECT Notifications FROM tb_notifications WHERE UserId='" + Id1 + "'", mcon);
      
            DataTable data = new DataTable();
            Notif.Fill(data);
            string Not1 = data.Rows[0][3].ToString();

            for (int i = 0; i < Not1.Length; i++) { TXT_Notifications.Text += "• " + Not1[i] + "\n"; }



La ligne
string Not1 = data.Rows[0][3].ToString(); est pour affiche le 3ème champ de la table qui est UserId

Merci de votre aide


4 réponses

Utilisateur anonyme
6 août 2016 à 12:21
Bonjour peux tu poser un exemple de texte présent dans ta table et ce que tu voudrais obtenir?
0
Jaber_ Messages postés 23 Date d'inscription dimanche 17 juillet 2016 Statut Membre Dernière intervention 23 novembre 2016
6 août 2016 à 20:17
Bonjour Whismeril,

En fait, Dans un premier formulaire, je me connecte et l'Id de l'utilisateur est mémorisé.
Ensuite, dans se second formulaire, je me connecte à une seconde table :
CREATE TABLE `tb_notifications` (
  `NumId` int(11) NOT NULL,
  `DateNotif` datetime NOT NULL,
  `UserId` varchar(11) NOT NULL,
  `Notifications` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `tb_notifications` (`NumId`, `DateNotif`, `UserId`, `Notifications`) VALUES
(1, '2016-08-05 08:26:20', '1', 'Bonjour toi !'),
(2, '2016-08-05 14:31:22', '2', 'Salut');
(3, '2016-08-05 14:31:22', '1', 'Tu vas bien ?');

d'où je dois comparer le UserId (1) de l'Id de la première table et afficher la notification de celle-ci comme suite :
• Bonjour toi !
• Tu vas bien ?


Voilà, j'espère que j'ai été explicite :s
Merci encore pour ton aide !
Cordialement
0
Utilisateur anonyme
6 août 2016 à 22:31
Les bases de données c'est pas mon fort et surtout pas avec un datatable, je me sers de Linq.
C'est pourquoi je ne t'ai pas demandé quelle requête tu fais, mais ce qui est sensé être là
            string Not1 = data.Rows[0][3].ToString();


Parce que ce qui est sûr c'est que
            for (int i = 0; i < Not1.Length; i++) { TXT_Notifications.Text += "• " + Not1[i] + "\n

Ça ne peut pas donner
• Bonjour toi !
• Tu vas bien 


Not1 est un string donc Not1[i] est un caractère pas une phrase.


Cela dit data.Rows[0][3].ToString(), au vue de ce que tu montres, ne peux retourner que Bonjour Toi!, et Tu vas bien ? doit se trouver dans data.Rows[1][3].ToString()

En supposant que tu travailles en FrameWork >= 4.0, tu fais un foreach sur tes Row, à chacune tu ajoutes "• " + la case 3 dans une list<string>.

A la fin de la boucle, tu faits un string.Join de cette list avec "\n\r" comme séparateur
0
Jaber_ Messages postés 23 Date d'inscription dimanche 17 juillet 2016 Statut Membre Dernière intervention 23 novembre 2016
Modifié par Jaber_ le 9/08/2016 à 11:01
Bonjour Whismeril,

Et voilà ! avec ce code tout fonctionne parfaitement !

Dans le load :
MyConnexion.Open();

            using (MySqlCommand cmd = new MySqlCommand("select * from tb_notifications where UserId=" + Id1, MyConnexion))
            {
                MySqlDataAdapter adapter = new MySqlDataAdapter("select * from tb_notifications where UserId=" + Id1, MyConnexion);
                DataSet DS = new DataSet();
 
                adapter.Fill(DS);
                MySqlDataReader reader = cmd.ExecuteReader();

                for (int i = 0; i < DS.Tables[0].Rows.Count; i++)

                {
                    TXT_Notifications.Text = TXT_Notifications.Text + "• " + DS.Tables[0].Rows[i][3].ToString() + "\r\n";

                }
            }
MyConnexion.Close();
0