Ответ 1
dataGridView1.ClearSelection();
Должен работать. Может быть, у вас есть код, который автоматически выбирает строки, которые запускаются?
У меня есть два 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;
тоже не работает.
Я установил режим выбора для полного выбора строки, и я понятия не имею, как достичь своей цели. Спасибо большое!
dataGridView1.ClearSelection();
Должен работать. Может быть, у вас есть код, который автоматически выбирает строки, которые запускаются?
Поскольку ответа нет, и я использовал этот ответ в других сообщениях, и я столкнулся с той же проблемой, что и первая строка, и отменить выбор невозможно:
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 вообще будет работать) отключить выбор первой строки
Ответ на 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
Просто используйте:
dgvName.ClearSelection();
Убедитесь, что все строки не выбраны (dataGridView.Rows [...]. Selected = false)
Нулевое значение по умолчанию выбрано, поэтому установите значение dataGridView.Rows [0].Selected = false при открытии DataGridView и до тех пор, пока другие параметры установлены так, что пользователь не может выбрать, тогда вы будете иметь и поддерживать, ничего не выбрано.
Если вы используете 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, если вы планируете использовать одноэлементный класс в разных представлениях, он не будет работать без него.
Как сказано @Taw в подкомплексах верхнего ответа - "Не называйте это слишком скоро!" .
В моем случае поведение по умолчанию не работает вообще. Мой случай - datagrid на вкладке tabControl, и это не сработало, если эта вкладка пока не показана!
Этот хак работает как шарм:
AnyTabControl.SelectedTab = FirsTab;
gridModules.ClearSelection(); //placed at first tab
AnyTabControl.SelectedTab = SecondTab; //that tab i would like to show first
В результате: вторая вкладка отображается пользователю, а когда он нажал на первый - выбор не появится.
// no selection in dgv at the begening
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !