Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

работа с DataGridView в C#

16K
22 ноября 2008 года
_HemP_
50 / / 09.03.2008
у DataGridView слева есть колонка, которая ничем не заполненна и вводить туда нельзя.
при нажатии на эту колонку выделяется вся строка.
мне надо получить индекс этой строки... помогите пожалуйста )

ещё один вопрос:
в таблице есть в колонки: 1ая - с временем, вторая с текстом..
при неправильном вводе времени выводиться ошибка и в этой ячейке должен выделиться текст для его корректировки...
Код:
private void dgv1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
          DateTime q;
                try
                {
                    q = Convert.ToDateTime(Convert.ToString (dgv1[0, e.RowIndex ].Value));
                }
                catch
                {
         
                    MessageBox.Show ("Неправильно введено время");
                    dgv1[0, e.RowIndex].Value = "";
                    dgv1[0, e.RowIndex].DataGridView.Select();
                }
           
        }

dgv1[0, e.RowIndex].Value = ""; - я просто пока стираю.
dgv1[0, e.RowIndex].DataGridView.Select(); - не работает, ячейка не выделяется.. (

помогите пожалуйста! )
16K
30 ноября 2008 года
_HemP_
50 / / 09.03.2008
хороший я вопрос задал...
не уж то никто не знает? ((
288
01 декабря 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: _HemP_
у DataGridView слева есть колонка, которая ничем не заполненна и вводить туда нельзя.
при нажатии на эту колонку выделяется вся строка.
мне надо получить индекс этой строки... помогите пожалуйста )


Например так

 
Код:
dataGridView1.SelectedRows


Цитата: _HemP_

dgv1[0, e.RowIndex].DataGridView.Select(); - не работает, ячейка не выделяется.. (


 
Код:
dataGridView1[0, e.RowIndex].Selected = true;
16K
01 декабря 2008 года
_HemP_
50 / / 09.03.2008
Цитата:

 
Код:
dataGridView1[0, e.RowIndex].Selected = true;


пробывал в функции
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
работает только по нажатию мышки на другую ячейку, а вот на Enter и Tab не распространяется (
подскажите в какой функции делать?

Цитата:

 
Код:
dataGridView1.SelectedRows


хм.. пробывал сделать в функции обрабатывающей нажатии кнопки, в Label выводится совсем не индекс строки...

 
Код:
private void button1_Click(object sender, EventArgs e)
        {
            label1.Text  = dataGridView1.SelectedRows.ToString();
        }

результатом было
"System.Windows.Forms.DataGridViewSelectedRowCollection"
288
02 декабря 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: _HemP_
пробывал в функции
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
работает только по нажатию мышки на другую ячейку, а вот на Enter и Tab не распространяется (
подскажите в какой функции делать?



Например SelectionChanged

Цитата: _HemP_

хм.. пробывал сделать в функции обрабатывающей нажатии кнопки, в Label выводится совсем не индекс строки...

 
Код:
private void button1_Click(object sender, EventArgs e)
        {
            label1.Text  = dataGridView1.SelectedRows.ToString();
        }

результатом было
"System.Windows.Forms.DataGridViewSelectedRowCollection"



Вообще-то dataGridView1.SelectedRows - это коллекция. И доступ к ее элементам осуществляйте по индексам. Например dataGridView1.SelectedRows[0]

16K
02 декабря 2008 года
_HemP_
50 / / 09.03.2008
Цитата:

Например SelectionChanged



это событие выполняется прям с загрузкой формы, а надо что бы при переведении на другую ячейку...

Цитата:

Вообще-то dataGridView1.SelectedRows - это коллекция. И доступ к ее элементам осуществляйте по индексам. Например dataGridView1.SelectedRows[0]



мне надо вернуть этот индекс по щелчку.... а не писать самому
и в какое событие добавлять это?:)

66K
18 декабря 2010 года
Enigmayl
1 / / 18.12.2010
Походу я тут с ответом несколько припозднился (годика так на 2))

Для получения индекса строки можно использовать следующий код:
 
Код:
int index = dataGridView1.CurrentRow.Index;
//или такой
index = dataGridView1.CurrentCell.OwningRow.Index;


С откатом значения все несколько сложнее, но можно сделать так:
Код:
private void dataGridView2_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if(e.ColumnIndex != 1 /*указать нужный номер столбца, где время сидит*/)
                return;

            //Нельзя валидэйтить новую строку
            //иначе просто повиснет
            if (dataGridView2.Rows[e.RowIndex].IsNewRow)
                return;

            try
            {
                DateTime dt = DateTime.Parse((string)dataGridView2.CurrentCell.Value);
            }
            catch
            {
                e.Cancel = true;
                MessageBox.Show("Can you input the date a bit more correctly?");
                dataGridView2.CancelEdit();
            }
        }


То бишь, для отката надо пользовать коллбэк CellValidating, а не CellEndEdit.
Надеюсь, что это кому-нибудь поможет ^_^.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог