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();
}
}
работа с DataGridView в C#
при нажатии на эту колонку выделяется вся строка.
мне надо получить индекс этой строки... помогите пожалуйста )
ещё один вопрос:
в таблице есть в колонки: 1ая - с временем, вторая с текстом..
при неправильном вводе времени выводиться ошибка и в этой ячейке должен выделиться текст для его корректировки...
Код:
dgv1[0, e.RowIndex].Value = ""; - я просто пока стираю.
dgv1[0, e.RowIndex].DataGridView.Select(); - не работает, ячейка не выделяется.. (
помогите пожалуйста! )
не уж то никто не знает? ((
Цитата: _HemP_
у DataGridView слева есть колонка, которая ничем не заполненна и вводить туда нельзя.
при нажатии на эту колонку выделяется вся строка.
мне надо получить индекс этой строки... помогите пожалуйста )
при нажатии на эту колонку выделяется вся строка.
мне надо получить индекс этой строки... помогите пожалуйста )
Например так
Код:
dataGridView1.SelectedRows
Цитата: _HemP_
dgv1[0, e.RowIndex].DataGridView.Select(); - не работает, ячейка не выделяется.. (
Код:
dataGridView1[0, e.RowIndex].Selected = true;
Цитата:
Код:
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();
}
{
label1.Text = dataGridView1.SelectedRows.ToString();
}
результатом было
"System.Windows.Forms.DataGridViewSelectedRowCollection"
Цитата: _HemP_
пробывал в функции
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
работает только по нажатию мышки на другую ячейку, а вот на Enter и Tab не распространяется (
подскажите в какой функции делать?
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();
}
{
label1.Text = dataGridView1.SelectedRows.ToString();
}
результатом было
"System.Windows.Forms.DataGridViewSelectedRowCollection"
Вообще-то dataGridView1.SelectedRows - это коллекция. И доступ к ее элементам осуществляйте по индексам. Например dataGridView1.SelectedRows[0]
Цитата:
Например SelectionChanged
это событие выполняется прям с загрузкой формы, а надо что бы при переведении на другую ячейку...
Цитата:
Вообще-то dataGridView1.SelectedRows - это коллекция. И доступ к ее элементам осуществляйте по индексам. Например dataGridView1.SelectedRows[0]
мне надо вернуть этот индекс по щелчку.... а не писать самому
и в какое событие добавлять это?:)
Для получения индекса строки можно использовать следующий код:
Код:
int index = dataGridView1.CurrentRow.Index;
//или такой
index = dataGridView1.CurrentCell.OwningRow.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();
}
}
{
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.
Надеюсь, что это кому-нибудь поможет ^_^.