Удалить синюю строку из DataGridView WinForms - PullRequest
1 голос
/ 11 мая 2011

Когда я заполняю DataGridView строка за строкой (вызывая функцию добавления), верхняя строка окрашивается в синий цвет.Это не выбрано, потому что я пробовал ClearSelection () также, но это не сработало.Это создает неправильную иллюзию того, что выбран первый ряд.

Как от него избавиться?

 void FillDGV()
    {
        dataGridViewParties.Rows.Clear();
        for (int i = 0; i < dataGridViewParties.Columns.Count; i++)
        {
            dataGridViewParties.Columns[i].Width = this.Width / dataGridViewParties.Columns.Count;
        }


        DataTable partyTbl = UtilityClass.GetDataTable(@"SELECT [PartyID]
                                                        ,[PartyName]
                                                        ,[PartyAddress]
                                                        ,[PartyState]
                                                        ,[PartyCity]
                                                        ,[PartyPhone]
                                                        FROM [VegiManager].[dbo].[Parties]
                                                        WHERE [PartyName] LIKE '" + textBoxPartySearch.Text + "%' ");
        foreach (DataRow dr in partyTbl.Rows)
        {
            dataGridViewParties.Rows.Add(1);

            dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[0].Value = dr["PartyID"].ToString();
            dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[1].Value = dr["PartyName"].ToString();
            dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[2].Value = dr["PartyAddress"].ToString();
            dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[3].Value = dr["PartyState"].ToString();
            dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[4].Value = dr["PartyCity"].ToString();
            dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[5].Value = dr["PartyPhone"].ToString();
        }

        if (dataGridViewParties.Rows.Count > 0)
        {
            dataGridViewParties.ClearSelection();
            dataGridViewParties.CurrentCell = null;
        }
    }

В отладчике я обнаружил, что CurrentCell уже равен нулю перед DataGridViewParties.CurrentCell = null;выполняется.

Этот вопрос http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/c440c4f6-6dfc-47b6-97c0-1ce49c105b64/ также связан с ним, но не предлагает решения.

РЕДАКТИРОВАТЬ: Это странно, но работает для события Load, я делал это вконструктор.Я хочу, чтобы при выборе первой строки и при нажатии пользователем клавиши со стрелкой ВВЕРХ фокус переместился в определенное текстовое поле.Но в этом случае это не работает (первая строка отображается синим цветом)

    private void dataGridViewInwards_KeyDown(object sender, KeyEventArgs e)
    {
         if (e.KeyCode == Keys.Up && dataGridViewParties.SelectedRows.Count > 0 && dataGridViewParties.SelectedRows[0].Index == 0)
        {
            textBoxPartySearch.Focus();
            dataGridViewParties.ClearSelection();
            dataGridViewParties.CurrentCell = null;
        }
        else if (e.KeyCode == Keys.Up && dataGridViewParties.SelectedRows.Count == 0)
        {
            textBoxPartySearch.Focus();
        }
    }

Ответы [ 5 ]

5 голосов
/ 03 июня 2011

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

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

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

dataGridView.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight;
dataGridView.DefaultCellStyle.SelectionForeColor = SystemColors.Window;

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

4 голосов
/ 11 мая 2011

Для достижения этого вместе с ClearSelection вам нужно установить еще одно свойство

Попробуйте это в DataBindingComplete

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

EDIT

На основании ваших комментариев вы можете изменить код как

if (e.KeyCode == Keys.Up && dataGridView1.CurrentCell.RowIndex == 0)
{                   
     this.ActiveControl = textBoxPartySearch;
     dataGridView1.Refresh();
     dataGridView1.ClearSelection();
     dataGridView1.CurrentCell = null;
     e.Handled = true;
}
2 голосов
/ 23 июля 2013

Попробуйте добавить ClearSelection () к событию VisibleChanged следующим образом:

private void datagridview1_VisibleChanged(object sender, EventArgs e)
{
datagridview1.ClearSelection();
}
1 голос
/ 02 августа 2012

В Form.Shown Событие Просто сделайте:

dataGridView1.ClearSelection();
dataGridView1.CurrentCell = null;
1 голос
/ 06 марта 2012

После трех часов устранения неполадок, я понял: ваш DataGridView должен отображаться на экране до вызова dataGridView.ClearSelection().

Как я знаю, это работает:

У меня есть два DataGridViews, каждый на отдельной панели. Только одна панель видна одновременно. На панели, которая изначально видна, DataGridView никогда не игнорировал мой вызов ClearSelection(), поэтому я никогда не видел выбранную строку сразу.

Раньше я заполнял другой DataGridView и очищал его выделение, прежде чем показывать панель, в которой он находится, но эта верхняя строка всегда оставалась выделенной. Я изменил свой код для отображения другой панели перед тем, как очистить выбор DataGridView, и вызов ClearSelection() сработал, как и должно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...