DataGridView在开头没有选定的行

时间:2013-04-08 12:48:16

标签: c# .net winforms datagridview

在我的WinForms中,我有DataGridView。我想一次选择完整行,因此我将SelectionMode设置为FullRowSelect。现在我遇到了问题,因为在开始时我的表单为第一行加下划线(所选行的集合为空,第一行未选中但仅加下划线)。我尝试过很多东西,比如:

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

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

如何摆脱这种下划线?

感谢您的帮助!

12 个答案:

答案 0 :(得分:14)

这对我有用:

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

答案 1 :(得分:12)

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

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

因此,如果有人想隐藏选择,那么它将会很好地运作。

干杯:)

答案 2 :(得分:12)

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

答案 3 :(得分:2)

您应该尝试插入已显示的事件datagridView.ClearCelection()以及datagridView.CurrentCell=null,例如,如果您想要选择要删除或更改信息的行,只需执行if(datagridView.CurrentCell==null){ MessageBox.Show("You must select row");}它对我有用

答案 4 :(得分:2)

尝试这可能会有所帮助

line_ani = animation.FuncAnimation(fig1, update_line, 25, fargs=(data, l),
interval=50, blit=False)

答案 5 :(得分:1)

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

答案 6 :(得分: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;
    }

答案 7 :(得分:0)

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

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

End Sub

答案 8 :(得分:0)

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

private void dataGridView_SelectionChanged(object sender, EventArgs e)
{

    if (FLAG==true)
    {
       dataGridView.ClearSelection();
       FLAG=false;
    }
}

答案 9 :(得分:0)

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

你可以这样做:

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

onStop

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

 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

3.在更改选择时将单元格样式更改为默认值,如cell_click或cell_double单击:

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

4.当你想关闭表格时,将全部恢复为默认值:

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

希望这能帮到你们。

答案 10 :(得分: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
    }
}

答案 11 :(得分:0)

在第一次显示帧后运行的

“显示” 事件对我有用:

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