20

在我的 WinForms 中,我有DataGridView. 我想一次选择整行,所以我设置SelectionModeFullRowSelect. 现在我遇到了问题,因为在开始时我的表单在第一行下划线(选定的行集是空的,第一行没有被选择,但只是下划线)。我尝试了很多东西,例如:

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

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

我怎样才能摆脱这个下划线?

谢谢你的帮助!

4

13 回答 13

20

只需放入dataGridView1.ClearSelection();表单的加载事件。

于 2014-10-09T15:32:48.003 回答
17

这对我有用:

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.Rows[0].Selected = false;
}
于 2013-04-08T13:45:04.187 回答
15

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

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

因此,如果有人只想隐藏选择,它会很好地工作。

干杯:)

于 2013-04-10T13:12:29.020 回答
2

您应该尝试放入 Shown 事件datagridView.ClearCelection()datagridView.CurrentCell=null例如,如果您想选择行来删除或更改信息,那么if(datagridView.CurrentCell==null){ MessageBox.Show("You must select row");}它对我有用

于 2016-08-04T12:11:37.590 回答
2

试试这可能会有所帮助

private void dgv_order_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            dgv_order.CurrentCell.Selected = false;
            dgv_order.ClearSelection();
        }
于 2016-10-12T08:03:22.647 回答
1

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

于 2013-04-09T04:07:43.097 回答
1

您可以像这样在 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;
    }
于 2016-04-01T10:21:01.057 回答
0

这项工作对我来说是为了明确选择数据绑定

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

End Sub
于 2013-09-07T10:36:04.113 回答
0

在开始时为禁用的选定行设置的事件是这个,并管理一个 FLAG 以停止 ClearSelection

private void dataGridView_SelectionChanged(object sender, EventArgs e)
{

    if (FLAG==true)
    {
       dataGridView.ClearSelection();
       FLAG=false;
    }
}
于 2016-09-22T08:53:55.713 回答
0

有时,当您在不关闭程序的情况下重新加载表单时,第一行将突出显示。但它不会被选中,你会得到 -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交互时改变cell样式:

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

希望这对你们有帮助。

于 2016-12-29T10:42:58.367 回答
0

如果这是因为它在初始加载时引发了不需要的 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
    }
}
于 2017-04-26T15:48:17.377 回答
0

在第一次显示帧后运行的“显示”事件对我有用:

private void frmMain_Shown(object sender, EventArgs e)
        {
            dataGridView1.ClearSelection();
        }
于 2020-02-06T00:27:54.027 回答
0

有同样的情况,“ dataGridView.Shown”事件是唯一对我来说像魔术一样的解决方案:

// Clears the default selection of both Data Grid Views
private void dataGridView_Shown(object sender, EventArgs e)
{
    dataGridView.ClearSelection();
}
于 2021-11-06T19:09:17.703 回答