开始时没有选定行的DataGridView

本文关键字:DataGridView 开始时 | 更新日期: 2023-09-27 18:08:16

在我的WinForms我有DataGridView。我想一次选择整行所以我把SelectionMode设为FullRowSelect。现在我有问题,因为在开始我的表单下划线第一行(选定行的集合是空的,第一行没有被选中,但只是下划线)。我尝试了很多方法,比如:

    private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        dataGridView1.ClearSelection();
    }

都失败了,因为实际上没有选择。

如何去掉这个下划线?

谢谢你的帮助!

开始时没有选定行的DataGridView

dataGridView1.ClearSelection();放到表单的load事件中

这个适合我:

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.Rows[0].Selected = false;
}

不幸的是,这些答案都没有帮助我,但我找到了其他解决方案。而不是无法选择,我将隐藏它,用这段代码:

dataGridView1.DefaultCellStyle.SelectionBackColor = dataGridView1.DefaultCellStyle.BackColor;
dataGridView1.DefaultCellStyle.SelectionForeColor = dataGridView1.DefaultCellStyle.ForeColor;

如果有人想隐藏选区它会很好地工作。

欢呼:)

你应该试着在显示事件中输入datagridView.ClearCelection()datagridView.CurrentCell=null例如,如果你想选择行来删除或更改信息就输入if(datagridView.CurrentCell==null){ MessageBox.Show("You must select row");}这对我来说很有效

试试这个可能会有帮助

private void dgv_order_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            dgv_order.CurrentCell.Selected = false;
            dgv_order.ClearSelection();
        }

尝试在InitializeComponent()之后的构造函数中设置DataGridView.AllowUserToAddRows = false

您可以在form_Load事件中像这样调用dataGridView.ClearSelection()方法…

    private void Form1_Load(object sender, EventArgs e)
    {
     // You will get selectedCells count 1 here
     DataGridViewSelectedCellCollection selectedCells = dataGridView.SelectedCells;
     // Call clearSelection 
     dataGridView.ClearSelection();
     // Now You will get selectedCells count 0 here
     selectedCells = dataGridViewSchedule.SelectedCells;
    }

这是我对数据绑定的明确选择

Protected Sub GridCancel_DataBinding(sender As Object, e As EventArgs) Handles GridCancel.DataBinding
    GridCancel.SelectedIndex = -1
End Sub

在开始时为禁用选定行设置的事件如下:并管理FLAG来停止ClearSelection

private void dataGridView_SelectionChanged(object sender, EventArgs e)
{
    if (FLAG==true)
    {
       dataGridView.ClearSelection();
       FLAG=false;
    }
}

如果这是因为它在初始加载时引发了不必要的GridView1_SelectionChanged事件,您可以使用一个标志来处理这个

public partial class YourFormName
{ 
    private bool IsReady= false;
    private void YourFormName_Load(object sender, EventArgs e)
    { 
           //Load your GridView1...
           //Format your GridView1...
            IsReady = true;
    }
    void GridView1_SelectionChanged(object sender, EventArgs e)
    {
         if (!IsReady) 
             return;
         //do the rest of the stuffs
    }
}

有时,在未关闭程序的情况下重新加载表单时,第一行将突出显示。但是它将不会被选中,并且您将为选中的行索引获得-1。

你可以这样做:

1。在加载表单时存储默认样式:

 Public Class aRoots
    Dim df1, df2, df3, df4 As Color
    Private Sub aRoots_Load(sender As Object, e As EventArgs) Handles Me.Load
            df1 = DGV_Root.DefaultCellStyle.SelectionBackColor
            df2 = DGV_Root.DefaultCellStyle.BackColor
            df3 = DGV_Root.DefaultCellStyle.SelectionForeColor
            df4 = DGV_Root.DefaultCellStyle.ForeColor

2。与datagridview交互时更改单元格样式:

Private Sub LoadRoot()
       For i = 0 To 5
                DGV_Root.Rows.Add()
                For j = 0 To 3
                    DGV_Root.Item(j, i).Value = ...
                Next
            Next
        'DGV_Root.ClearSelection() ==> instead of this use 2 lines below
        DGV_Root.DefaultCellStyle.SelectionBackColor = df2
        DGV_Root.DefaultCellStyle.SelectionForeColor = df4
    End Sub

3。当选择被更改时,将单元格样式更改为默认值,如cell_click或cell_double click:

Private Sub DGV_Root_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DGV_Root.CellMouseClick
        DGV_Root.DefaultCellStyle.SelectionBackColor = df1
        DGV_Root.DefaultCellStyle.SelectionForeColor = df3

...
End Sub

4。

当你想关闭表单时,将所有恢复为默认值:
Private Sub PbClose_Click(sender As Object, e As EventArgs) Handles PbClose.Click
        BtnCancel.PerformClick()
        DGV_Root.DefaultCellStyle.SelectionBackColor = df1
        DGV_Root.DefaultCellStyle.BackColor = df2
        DGV_Root.DefaultCellStyle.SelectionForeColor = df3
        DGV_Root.DefaultCellStyle.ForeColor = df4
        Me.Close()
End Sub

"已显示"在第一个帧显示后运行的事件为我工作:

private void frmMain_Shown(object sender, EventArgs e)
        {
            dataGridView1.ClearSelection();
        }

有同样的情况,"dataGridView.Shown";Event对我来说是唯一像魔法一样有效的解决方案:

// Clears the default selection of both Data Grid Views
private void dataGridView_Shown(object sender, EventArgs e)
{
    dataGridView.ClearSelection();
}

我知道我来晚了,但是我几乎有一个非常合适的方法来解决你的问题。所以你所要做的就是添加一个计时器在TICK方法中设置为ENABLE,禁用定时器,然后放入DGV.ClearSelection();保持定时器间隔为100

  private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Enabled= false;
        DGV.ClearSelection();
    }

问题解决了,之后选择仍然可以正常工作。