Pobieranie wartości do pola tekstowego przy podwojnym klickieciu

0

Witam,

używajać GridDataView, zapelniłem widok danymi z lokalnej bazy danych, chcialbym aby po podwojnym kliknieciu na pierwsza komorke dane zostaly przekazane do odpowiedniego pola tekstowego, napisalem cos takiego:

private void GridObslugaKont_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                openCon();
                DataTable dt2 = new DataTable();
                SqlDataAdapter sda2 = new SqlDataAdapter("Select * from dbo.OpUser where login='" + GridObslugaKont.SelectedRows[0].Cells[0].Value.ToString() + "' ", con);
                sda2.Fill(dt2);


                emailbltxt.Text = dt2.Rows[0][0].ToString();
                phonetextlbl.Text = dt2.Rows[0][1].ToString();
                //startDatePicker.Text = dt2.Rows[0][2].ToString();
                //EndDatePicker.Text = dt2.Rows[0][3].ToString();
                isAdmintxt.Text = dt2.Rows[0][8].ToString();
                CloseCon();
            }

            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }
        } 

jednak niestety przy podwojnym kliknieciu mam błąd : "System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of collection.

Parametr name : index
at System.Collection.ArrayList.get_Item(Int32 index)"

błąd jest dla : GridObslugaKont.SelectedRows[0].Cells[0].Value.ToString() jak mozna sie domyslic,
chce aby szukalo mi w bazie po wybranym loginie.

Bardzo prosze o pomoc!!

0

No widocznie tablica SelectedRows jest w tym momencie pusta, albo dany wiersz nie posiada komórek. Próbowałeś to debugować i podejrzeć co tam masz za wartości?

0

Zrobilem to w ten sposob :

private void GridObslugaKont_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
{
DataGridViewRow row = this.GridObslugaKont.Rows[e.RowIndex];
emailbltxt.Text = row.Cells[3].Value.ToString();
phonetextlbl.Text = row.Cells[4].Value.ToString();
isAdmintxt.Text = row.Cells[8].Value.ToString();
}
}

0

Skorzystaj z SelectedRows.Count :)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Program {
    class Person {
        public string Name { get; set; }
        public string Surname { get; set; }
        public Person(string name, string surname) {
            this.Name = name;
            this.Surname = surname;
        }
    }

    class Program {
        static void Main(string[] args) {
            var list = new List<Person>() { 
                new Person("Gregory", "Kowalsky"),
                new Person("Thomas", "Anderson")
            };

            var form = new Form();
            var textbox = new TextBox();
            var grid = new DataGridView();
            grid.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            grid.DataSource = list;
            grid.DoubleClick += (sender, e) => {
                if (grid.SelectedRows.Count > 0) {
                    textbox.Text = grid.SelectedRows[0].Cells[0].Value.ToString()
                        + " " + grid.SelectedRows[0].Cells[1].Value.ToString();
                }
            };

            var layout = new TableLayoutPanel();
            layout.Dock = DockStyle.Fill;

            layout.Controls.Add(grid);
            layout.Controls.Add(textbox);

            form.Controls.Add(layout);
            form.ShowDialog();
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1