Подтвердить что ты не робот

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

У меня есть два datagridviews, и когда я нажимаю на один из них, я бы хотел отменить выбор во втором 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;

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

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

4b9b3361

Ответ 1

dataGridView1.ClearSelection();

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

Ответ 2

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

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 был объектом с первой вкладкой-остановкой в ​​моей форме окна. Перенести вкладку сначала на другой объект (возможно, отключить tabstop для datagrid вообще будет работать) отключить выбор первой строки

Ответ 3

Ответ на 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

Ответ 4

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

dgvName.ClearSelection();

Ответ 5

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

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

Ответ 6

Если вы используете 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, если вы планируете использовать одноэлементный класс в разных представлениях, он не будет работать без него.

Ответ 7

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

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

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

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

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

Ответ 8

// no selection in dgv at the begening   
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !