Member 13765884 Ответов: 2

Разрешить пользователю только щелкнуть первую строку datagridview C#


Можно ли разрешить пользователю только выбрать первый элемент в поле datagridview? Пока что это код, который у меня есть, блокирует все использование - включая первую строку...

private void productionDataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    if (productionDataGridView.SelectedRows.Count <= 1)
    {
        MessageBox.Show("Please select the first item in list");
    }
    else if (productionDataGridView.SelectedRows.Count == 0)
    {
        productionDataGridView.CurrentRow.Cells[4].Value.ToString().Split(',').ToList().ForEach(r => listBox2.Items.Add(r.Trim()));
        OrderIDTxt.Text = this.productionDataGridView.CurrentRow.Cells[0].Value.ToString();

    }
}


Что я уже пробовал:

перестановка кода и google - но информации об этом не так уж много

Richard MacCutchan

Просто проверьте номер строки, когда пользователь пытается выбрать один из них. Если это что - то другое, чем первая строка, то покажите сообщение об ошибке.

Member 13765884

Я думал, что это то, что я уже сделал

Richard MacCutchan

Я не совсем понимаю ваш код. Почему вы проверяете количество, а не номер строки?

F-ES Sitecore

if (productionDataGridView.Избранные воробьи.Count <= 1)
{
// этот
}
else if (productionDataGridView.Избранные воробьи.Количество == 0)
{
// что
}

"это" никогда не будет вызвано, потому что если productionDataGridView.Избранные воробьи.Count равен 0, тогда он перейдет в "это". Базовая отладка покажет вам эти вещи.

2 Ответов

Рейтинг:
2

OriginalGriff

Хм.

if (productionDataGridView.SelectedRows.Count <= 1)
{
    MessageBox.Show("Please select the first item in list");
}
Поэтому, если он что-то выберет, счет будет один или несколько, независимо от выбранной строки...

Кроме того, двойной щелчок-это не единственный способ выбрать строку: один щелчок сделает это, как и один щелчок, за которым следует CTRL и второй щелчок строки, или ...

Вместо этого обработайте событие SelectionChanged:
private void myDataGridView_SelectionChanged(object sender, EventArgs e)
    {
    DataGridView dgv = sender as DataGridView;
    if (dgv != null)
        {
        DataGridViewSelectedRowCollection selected = dgv.SelectedRows;
        if (selected.Count != 1 || selected[0].Index != 0)
            {
            dgv.ClearSelection();
            }
        }
    }
И пользователь не может выбрать ничего, кроме первой строки.


Рейтинг:
0

Maciej Los

Пожалуйста, ознакомьтесь с документацией! Практическое руководство.Свойство SelectedRows (System.Окна.Формы)[^] получает коллекцию строк, выбранных пользователем, но вам нужно выяснить, что CurrentRow[^] это первый ряд (Rows[0])!
Я бы предложил использовать это событие: Практическое руководство.Событие SelectionChanged (Системы.Окна.Формы)[^]

if(productionDataGridView.CurrentRow != productionDataGridView.Rows[0])
{
    //MessageBox.Show("Please select the first item in list");
    productionDataGridView.CurrentCell = productionDataGridView.Rows[0].Cells[e.ColumnIndex]; //change selection to first row
}


Для получения более подробной информации, пожалуйста, смотрите:
Как получить выбранные ячейки, строки и столбцы в элементе управления Windows Forms DataGridView | Microsoft Docs[^]
Практическое руководство.Свойство CurrentCell (Системы.Окна.Формы)[^]
Класс DataGridViewCell (System.Окна.Формы)[^]