Отменить выбор всех строк в datagridview - PullRequest
20 голосов
/ 07 сентября 2011

У меня есть два вида сетки данных, и когда я щелкаю по одному из них, я хочу отменить выбор всего выделения во втором виде сетки данных, я попробовал это, но ничего не работает:

firstItemsDataGridView.ClearSelection();
firstItemsDataGridView.CurrentCell = null;

не работает,

firstItemsDataGridView.ClearSelection();
if (firstItemsDataGridView.Rows.Count > 0)
    firstItemsDataGridView[1, 0].Selected = true;
firstItemsDataGridView.CurrentCell = null;
firstItemsDataGridView.ClearSelection();
foreach (DataGridViewRow item in firstItemsDataGridView.Rows) {
    item.Selected = false;

    foreach (DataGridViewCell itemCell in firstItemsDataGridView.Columns) {
        itemCell.Selected = false;
    }
}

не работает,

firstItemsDataGridView.Rows[0,-1].Selected = true;

тоже не работает.

Я установил режим выбора на полный выбор строки, и я понятия не имею, как достичь своей цели.
Большое спасибо!

Ответы [ 9 ]

53 голосов
/ 07 сентября 2011
dataGridView1.ClearSelection();

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

4 голосов
/ 20 июля 2013

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

Color blue  = ColorTranslator.FromHtml("#CCFFFF");
Color red = ColorTranslator.FromHtml("#FFCCFF");
Color letters = Color.Black;

foreach (DataGridViewRow r in datagridIncome.Rows)
{
    if (r.Cells[5].Value.ToString().Contains("1")) { 
        r.DefaultCellStyle.BackColor = blue;
        r.DefaultCellStyle.SelectionBackColor = blue;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
    else { 
        r.DefaultCellStyle.BackColor = red;
        r.DefaultCellStyle.SelectionBackColor = red;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
}

Это небольшой трюк, единственный способ увидеть строку, выбранную, - это самый первый столбец (не столбец [0], а один из них, следовательно). Когда вы щелкнете по другой строке, вы больше не увидите выделение синим цветом, только стрелка указывает, какая строка выбрана.

РЕШЕНИЕ:

Я выяснил, почему моя первая строка была выбрана по умолчанию, и выяснил, как не выбирать ее по умолчанию.

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

3 голосов
/ 07 октября 2013

Ответ на NullSkull решил для меня проблему, заключающуюся в том, что ячейка в строке 0, столбце 0 для элемента управления datagridview всегда выбиралась при загрузке формы и не могла быть отменена, несмотря на вызов ClearSelection в методе конструктора формы.Мне просто нужно было вызвать ClearSelection в событии Form_Load.http://www.nullskull.com/q/10066166/how-to-deselect-the-first-row-when-the-form-i-loaded-in-datagridview-in-windows-application.aspx

1 голос
/ 20 декабря 2014

Просто используйте:

dgvName.ClearSelection ();

0 голосов
/ 02 мая 2018

Я попробовал это, и это работает для меня:

for (int i = 0; i < dataGridView1.Rows.Count;i++)
{
  dataGridView1.Rows[i].Selected = false;
}
0 голосов
/ 05 августа 2016

Как сказал @Taw в подкомментариях к верхнему ответу - "Не звоните слишком рано!" .

В моем случае поведение по умолчанию вообще не работает.Мой случай - сетка данных на вкладке tabControl , и она не сработала, если эта вкладка раньше не отображалась!

Этот хак работает как шарм:

AnyTabControl.SelectedTab = FirsTab;
gridModules.ClearSelection(); //placed at first tab
AnyTabControl.SelectedTab = SecondTab; //that tab i would like to show first

Результат: вторая вкладка отображается для пользователя, а при нажатии на первую - выбор не появится.

0 голосов
/ 09 апреля 2014

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

попробуйте что-то вроде этого

public class SingletonClass
{
    private static SingletonClass _Instance;
    public static SingletonClass Instance
    {
        get
        {
            if (_Instance == null)
                _Instance = new SingletonClass();
            return _Instance;
        }
    }   // End Property Instance

    private object _SelectedItem;
    public object SelectedItem
    {
        get { return _SelectedItem; }
        set { _SelectedItem = value; }
    } // End Selected Item
 }

<DataGrid Name="Datagrid1" SelectedItem="{Binding Source={x:Static Const:SingletonClass.Instance},Path=SelectedItem,IsAsync=True}">

<DataGrid Name="Datagrid2" SelectedItem="{Binding Source={x:Static Const:SingletonClass.Instance},Path=SelectedItem,IsAsync=True}">

* Я использовал только одноэлементный класс, потому что он будет работать в разных представлениях в разных случаях, вы можете использовать обычный класс, если вы в одном и том же представлении.

Обратите внимание, IsAsync = True на xmal, если вы планируете использовать одноэлементный класс для разных представлений, он не будет работать без него.

0 голосов
/ 09 сентября 2013
// no selection in dgv at the begening   
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !
0 голосов
/ 13 марта 2013

Убедитесь, что все строки сняты (dataGridView.Rows [...]. Selected = false)

Строка ноль по умолчанию выбрана, поэтому установите dataGridView.Rows [0] .Selected = false при открытии DataGridView и до тех пор, пока установлены другие параметры, так что пользователь не может выбирать, тогда вы будете иметь и поддерживать, ничего не выбрано.

...