2

Je travaille sur un formulaire avec les commandes datagridview et webbrowser. J'ai trois colonnes comme URL, nom d'utilisateur et mot de passe dans datagridview. Ce que je veux faire est d'automatiser la connexion pour certains sites Web que j'utilise fréquemment. Pour cette raison, je ne suis pas sûr que ce soit la bonne approche, mais j'ai créé le code ci-dessous. Le problème est avec l'argument de switch.Boucle du boîtier de commutation C# pour les cellules Datagridview

Je clique sur la ligne sur datagridview, puis sur login_button afin que les informations de nom d'utilisateur et de mot de passe soient transmises aux champs correspondants sur la page Web. Pourquoi ai-je besoin d'une boucle de casse, car toutes les pages Web ont des ID d'élément différents pour les champs de nom d'utilisateur et de mot de passe. Comme je l'ai dit, je ne suis pas sûr si datagridview permet switch-case, j'ai cherché sur le net, mais n'a pas pu trouver d'échantillons.

private void login_button_Click(object sender, EventArgs e) 
    { 
     switch (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()) 
     { 
      case "http://www.website1.com": 
       webBrowser1.Document.GetElementById("username").InnerText = dataGridView1.Rows[3].Cells[3].Value.ToString(); 
       webBrowser1.Document.GetElementById("password").InnerText = dataGridView1.Rows[3].Cells[4].Value.ToString(); 
       return; 
      case "http://www.website2.com": 
       webBrowser1.Document.GetElementById("uname").InnerText = dataGridView1.Rows[4].Cells[3].Value.ToString(); 
       webBrowser1.Document.GetElementById("pswd").InnerText = dataGridView1.Rows[4].Cells[4].Value.ToString(); 
       return; 
     } 
     HtmlElementCollection elements = this.webBrowser1.Document.GetElementsByTagName("Form"); 
     foreach (HtmlElement currentElement in elements) 
     { 
      currentElement.InvokeMember("Login"); 
     } 
    } 

Répondre

0

Avez-vous assuré que

dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); 

renvoie l'URL?

Ce serait le premier endroit pour commencer.

Peut-être:

dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() 

Quant au DataGrid + commutateur, le DataGrid ne sait pas/soins sur le commutateur. Tout ce qu'il sait que lorsque le bouton est pressé appelez:

private void login_button_Click(object sender, EventArgs e) 

Que se passe-t-il si vous codez l'URL? Est-ce que tout le reste fonctionne?

EDIT: D'oh ça ne va pas au travail! Vous avez des retours dans votre commutateur. Donc, vous terminez la méthode et ne jamais appeler:

HtmlElementCollection elements = this.webBrowser1.Document.GetElementsByTagName("Form"); 
    foreach (HtmlElement currentElement in elements) 
    { 
     currentElement.InvokeMember("Login"); 
    } 
0

Je ne suis pas sûr que ce soit défini comme celui-ci en C#, mais vous devrez peut-être effectuer le commutateur sur une variable temporaire par exemple

string site = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); 
switch(site) 
{ 
.... 
} 

si rien d'autre cela facilitera le débogage.

également chaque cas devrait se terminer par une pause; pas un retour;