c# datagridview範例 從DataGridView WinForms中刪除藍色的行




winform datagridview (4)

Form.Shown事件中只要做一個:

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

當我逐行填充一個DataGridView(調用它的add函數)時,最上面一行變成藍色。 它沒有被選中,因為我也嘗試了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之前已經為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();
        }
    }

嘗試將ClearSelection()添加到VisibleChanged事件中,如下所示:

private void datagridview1_VisibleChanged(object sender, EventArgs e)
{
datagridview1.ClearSelection();
}

我嘗試了上述方法,但沒有為我工作。

最後,我決定將所選單元格的默認顏色設置為與未選中的單元格相同。

然後,在單元格單擊方法中,我將其設置回來。 這樣,沒有任何東西出現,直到它被點擊,這是足夠的我的應用程序。 以下是我在click方法中用來將所有內容都恢復正常的代碼:

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

令人煩惱的是,如果我把它放在一個按鈕中,ClearSelection方法實際上工作得很好,但是如果我創建了包含數據網格的控件,請將一些數據加載到該控件中,然後嘗試清除它,那麼它不起作用。 我希望我知道為什麼...


要與ClearSelection一起實現這一點,您需要設置一個屬性

DataBindingComplete試試這個

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

編輯

根據您的意見,您可以修改代碼

if (e.KeyCode == Keys.Up && dataGridView1.CurrentCell.RowIndex == 0)
{                   
     this.ActiveControl = textBoxPartySearch;
     dataGridView1.Refresh();
     dataGridView1.ClearSelection();
     dataGridView1.CurrentCell = null;
     e.Handled = true;
}




datagridview