C # Switch-case Loop для ячеек Datagridview - PullRequest
2 голосов
/ 21 апреля 2010

Я работаю над формой с элементами управления datagridview и webbrowser.У меня есть три столбца как URL, имя пользователя и пароль в datagridview.Я хочу автоматизировать вход в систему для некоторых веб-сайтов, которые я часто использую.По этой причине я не уверен, что это правильный подход, но я создал приведенный ниже код.Проблема в аргументе switch.

Я нажму на строку в datagridview, а затем на кнопку login_button, чтобы информация об имени пользователя и пароле была передана в соответствующие поля на веб-странице.Почему мне нужен цикл переключения, потому что все веб-страницы имеют разные идентификаторы элементов для полей имени пользователя и пароля.

Как я уже сказал, я не уверен, что datagridview разрешает переключение регистра, я искал в сети, но не смогне найти образцы.

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");
        }
    }

Ответы [ 2 ]

0 голосов
/ 21 апреля 2010

Я не уверен, точно ли это так в C #, но вам, возможно, придется выполнить переключение на временную переменную например

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

Если ничего другого, это облегчит отладку.

также каждый случай должен заканчиваться перерывом; не возврат;

0 голосов
/ 21 апреля 2010

Вы убедились, что

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

возвращает URL?

Это будет первое место для начала.

Может быть:

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

Что касается переключателя сетки данных +, то сетка данных не знает / не заботится о переключателе. Все это знает, что при нажатии кнопки звоните:

private void login_button_Click(object sender, EventArgs e)

Что произойдет, если вы жестко закодируете URL? Все остальное работает?

EDIT: О, это не сработает! У вас есть возврат в вашем выключателе. Итак, вы заканчиваете метод и никогда не вызываете:

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