在C#或VB.NET中将按钮列添加到DataGridView的右侧
我想在用C#或VB.NET编写的WinForms应用程序中,在DataGridView的两侧添加一列按钮 每个按钮都与一行关联,并随行移动,如下所示:在C#或VB.NET中将按钮列添加到DataGridView的右侧,c#,vb.net,datagridview,C#,Vb.net,Datagridview,我想在用C#或VB.NET编写的WinForms应用程序中,在DataGridView的两侧添加一列按钮 每个按钮都与一行关联,并随行移动,如下所示: 无论视图有多宽,两侧的按钮始终可见。因此,即使用户向左或向右滚动,按钮也会固定在原位并始终可见 当用户在网格中上下滚动时,按钮与其关联的行一起滚动 我曾考虑将列添加到DataGridView并冻结它们(例如,dataGridView1.columns[0].Frozed=true),但问题是我无法冻结网格中的第一列和最后一列 有没有另一种方法可以
dataGridView1.columns[0].Frozed=true
),但问题是我无法冻结网格中的第一列和最后一列
有没有另一种方法可以让网格两侧都有一组动态按钮?如果您希望首先让所有列在
datagridview中始终可见,请使用
DataGridView.AutoSizeColumnMode = Fill
当然,中间列的宽度将自动更改
或者这里是您的问题的另一种解决方法:
在您的DataGridView
中,使用按钮(“左按钮”)创建第一列,并将其冻结
然后在主DataGridView
右侧创建另一个DataGridView
(将其称为dgvRightButton
)
添加一个DatGridViewButtonColumn
。然后同步这两个datagridview
VB.NET代码
Private Sub dgvTest1_Scroll(sender As Object, e As ScrollEventArgs) Handles dgvMain.Scroll
If e.ScrollOrientation = ScrollOrientation.VerticalScroll Then
Me.dgvRightButton.FirstDisplayedScrollingRowIndex = Me.dgvMain.FirstDisplayedScrollingRowIndex
End If
End Sub
我在第二个datagridview
中使用的测试代码(仍然是VB.NET代码,但注释是C#):
向第二个DataGridView
添加相同数量的按钮如下:
Private Sub dgvRightButton_AddRows()
For i As Int32 = 0 To Me.dgvTest1.Rows.Count - 1
Me.dgvRightButton.Rows.Add(New String() {"Right"})
Next
End Sub
如果希望第一列和所有列在datagridview
中始终可见,则使用
DataGridView.AutoSizeColumnMode = Fill
当然,中间列的宽度将自动更改
或者这里是您的问题的另一种解决方法:
在您的DataGridView
中,使用按钮(“左按钮”)创建第一列,并将其冻结
然后在主DataGridView
右侧创建另一个DataGridView
(将其称为dgvRightButton
)
添加一个DatGridViewButtonColumn
。然后同步这两个datagridview
VB.NET代码
Private Sub dgvTest1_Scroll(sender As Object, e As ScrollEventArgs) Handles dgvMain.Scroll
If e.ScrollOrientation = ScrollOrientation.VerticalScroll Then
Me.dgvRightButton.FirstDisplayedScrollingRowIndex = Me.dgvMain.FirstDisplayedScrollingRowIndex
End If
End Sub
我在第二个datagridview
中使用的测试代码(仍然是VB.NET代码,但注释是C#):
向第二个DataGridView
添加相同数量的按钮如下:
Private Sub dgvRightButton_AddRows()
For i As Int32 = 0 To Me.dgvTest1.Rows.Count - 1
Me.dgvRightButton.Rows.Add(New String() {"Right"})
Next
End Sub
在法比奥的回答之后,我想给出我自己在实施相同方法后的发现
我添加了两个名为dgvMain
和dgvDelete
的DataGridView组件。后者紧靠前者的右侧,是按钮出现的地方
对于dvgDelete
而言,它位于dgvMain
下方18个像素处,其高度比dgvMain小34个像素。这确保它与dgvMain
一致地滚动。我给它一个垂直滚动条,但不是水平滚动条
在dgvMain
上,我删除了垂直滚动条
我将两者绑定到同一数据源(在我的示例中是数组),但阻止了dgvDelete
自动生成列:
dgvDelete.AutoGenerateColumns = false;
我在包含按钮的dgvDelete
中添加了一列
与Fabio类似,我添加了以下代码(C#)来处理滚动
private void dgvDelete_Scroll(object sender, ScrollEventArgs e)
{
if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
{
dgvMain.FirstDisplayedScrollingRowIndex = dgvDelete.FirstDisplayedScrollingRowIndex;
}
}
我在dgvMain
中添加了一列按钮,并冻结了第一列:
dgvMain.Columns[0].Frozen = true;
现在我有一列按钮固定在可编辑数据的两侧
将两个网格绑定到同一数据源的一个很好的功能是,当您在dgvMain
网格中移动时,dvgDelete
中相应行中的按钮会自动高亮显示
我甚至可能会在第一列按钮的dgvMain
左侧立即添加第三个网格,但前提是性能影响可以忽略不计。对于Fabio的回答,我想给出实施相同方法后我自己的发现
我添加了两个名为dgvMain
和dgvDelete
的DataGridView组件。后者紧靠前者的右侧,是按钮出现的地方
对于dvgDelete
而言,它位于dgvMain
下方18个像素处,其高度比dgvMain小34个像素。这确保它与dgvMain
一致地滚动。我给它一个垂直滚动条,但不是水平滚动条
在dgvMain
上,我删除了垂直滚动条
我将两者绑定到同一数据源(在我的示例中是数组),但阻止了dgvDelete
自动生成列:
dgvDelete.AutoGenerateColumns = false;
我在包含按钮的dgvDelete
中添加了一列
与Fabio类似,我添加了以下代码(C#)来处理滚动
private void dgvDelete_Scroll(object sender, ScrollEventArgs e)
{
if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
{
dgvMain.FirstDisplayedScrollingRowIndex = dgvDelete.FirstDisplayedScrollingRowIndex;
}
}
我在dgvMain
中添加了一列按钮,并冻结了第一列:
dgvMain.Columns[0].Frozen = true;
现在我有一列按钮固定在可编辑数据的两侧
将两个网格绑定到同一数据源的一个很好的功能是,当您在dgvMain
网格中移动时,dvgDelete
中相应行中的按钮会自动高亮显示
我甚至可能会在dgvMain
左侧为第一列按钮添加第三个网格,但前提是性能影响可以忽略不计。谢谢Fabio。我还提出了第二个DataGridView的方法并实现了它。我将为下面的问题添加一个答案,以添加一些细节。不幸的是,由于我是StackOverflow的新手,我的声誉太低,无法推广您的答案,否则我会这么做。谢谢Fabio。我还提出了第二个DataGridView的方法并实现了它。我将为下面的问题添加一个答案,以添加一些细节。不幸的是