开始时没有选定行的DataGridView
本文关键字:DataGridView 开始时 | 更新日期: 2023-09-27 18:08:16
在我的WinForms我有DataGridView
。我想一次选择整行所以我把SelectionMode
设为FullRowSelect
。现在我有问题,因为在开始我的表单下划线第一行(选定行的集合是空的,第一行没有被选中,但只是下划线)。我尝试了很多方法,比如:
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
dataGridView1.ClearSelection();
}
都失败了,因为实际上没有选择。
如何去掉这个下划线?
谢谢你的帮助!
把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();
}