it-roy-ru.com

Отменить выбор всех строк в datagridview

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

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;

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

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

20
Martin Ch
dataGridView1.ClearSelection();

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

52
Mitzi

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

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], а, следовательно, одному столбцу). Когда вы щелкнете по другой строке, вы больше не увидите выделение синим цветом, только стрелка указывает, какая строка выбрана.

РЕШЕНИЕ:

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

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

4
Mario

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

3
voidmain

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

dgvName.ClearSelection ();

1
Ahmed Elzeiny

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

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

0
Klinkenbecker

Если вы используете 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
Bruno Khoury

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

for (int i = 0; i < dataGridView1.Rows.Count;i++)
{
  dataGridView1.Rows[i].Selected = false;
}
0
ayoub el badaoui
// no selection in dgv at the begening   
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !
0
AbuDawood