DataGridView選中行:

一、DataGridView選中行數據不更新

在使用DataGridView顯示數據時,如果在某個單元格中修改了內容,再選中其他行,會發現之前修改的單元格中的內容並沒有更新。出現這種情況的原因是因為DataGridView默認啟用了InEditMode屬性。當選中一個單元格,這個單元格成為活動單元格,會自動進入編輯模式。只有在編輯模式下修改的內容才會實時更新到綁定的數據源中。在非編輯模式下,DataGridView綁定的數據源不會自動更新。

解決方法:取消DataGridView的InEditMode屬性

dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;

二、DataGridView選中行右鍵菜單

在DataGridView中添加右鍵菜單能夠方便地對選中的行進行一些操作,比如刪除、複製等。

實現步驟:

1、添加一個ContextMenuStrip控件。

2、雙擊ContextMenuStrip控件,在事件處理程序中添加需要執行的代碼。

3、將DataGridView的ContextMenuStrip屬性設為新添加的ContextMenuStrip控件。

private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        contextMenuStrip1.Show(dataGridView1, e.X, e.Y);
    }
}

private void 刪除ToolStripMenuItem_Click(object sender, EventArgs e)
{
    foreach (DataGridViewRow row in dataGridView1.SelectedRows)
    {
        dataGridView1.Rows.Remove(row);
    }
}

三、DataGridView選中行數

通過以下代碼可以獲取DataGridView選中行的數量。

int selectedRows = dataGridView1.SelectedRows.Count;

四、DataGridView選中行顏色

在默認情況下,DataGridView選中行的背景色為藍色。我們可以通過以下代碼更改選中行的背景色和前景色。

dataGridView1.DefaultCellStyle.SelectionBackColor = Color.Yellow;
dataGridView1.DefaultCellStyle.SelectionForeColor = Color.Black;

五、DataGridView選中行數據

可通過以下代碼獲取選中行的數據。

if (dataGridView1.SelectedRows.Count > 0)
{
    DataGridViewRow selectedRow = dataGridView1.SelectedRows[0];
    string value1 = selectedRow.Cells[0].Value.ToString();
    string value2 = selectedRow.Cells[1].Value.ToString();
    // ...
}

六、DataGridView合併列

有時我們需要將DataGridView中的相鄰多個單元格合併成一列,可以通過CellPainting事件來實現。

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.RowIndex == -1 && e.ColumnIndex == 1)
    {
        e.PaintBackground(e.CellBounds, true);
        e.Graphics.DrawString("合併列的名稱", e.CellStyle.Font, Brushes.Black, e.CellBounds.X + 2, e.CellBounds.Y + 5);
        e.Handled = true;
    }
    else if (e.RowIndex >= 0 && e.ColumnIndex == 1)
    {
        DataGridViewCell cell1 = dataGridView1.Rows[e.RowIndex].Cells[1];
        DataGridViewCell cell2 = dataGridView1.Rows[e.RowIndex].Cells[2];
        cell1.Value = cell1.Value.ToString() + "\r\n" + cell2.Value.ToString();
        cell2.Style.BackColor = Color.Gray;
        cell2.Value = "";
        e.Handled = true;
    }
}

七、DataGridView選中行不跟隨

DataGridView默認情況下,選中行會跟隨鼠標移動。如果不想讓選中行跟隨鼠標移動,可以通過以下代碼實現。

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.RowHeadersVisible = false;
dataGridView1.ScrollBars = ScrollBars.None;

private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        dataGridView1.Rows[e.RowIndex].Selected = true;
    }
}

private void dataGridView1_CellMouseLeave(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        dataGridView1.Rows[e.RowIndex].Selected = false;
    }
}

八、DataGridView選中行的行號

在DataGridView中,默認情況下不顯示行號。如果需要獲取選中行的行號,可以通過以下代碼實現。

if (dataGridView1.SelectedRows.Count > 0)
{
    int rowIndex = dataGridView1.SelectedRows[0].Index;
    // ...
}

九、DataGridView選中行複製單元格

我們可以通過以下代碼實現DataGridView的選中行單元格內容的複製。

private void 複製ToolStripMenuItem_Click(object sender, EventArgs e)
{
    Clipboard.SetDataObject(dataGridView1.GetClipboardContent());
}

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.C)
    {
        Clipboard.SetDataObject(dataGridView1.GetClipboardContent());
        e.Handled = true;
    }
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/233871.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 17:12
下一篇 2024-12-11 17:12

相關推薦

發表回復

登錄後才能評論