C# DataGridView处理列重新排序事件
我为我的DataGridView对象设置了C# DataGridView处理列重新排序事件,c#,.net,datagridview,C#,.net,Datagridview,我为我的DataGridView对象设置了 AllowUserToOrderColumns = true; 如何检测列的重新排序 我不知道你到底想达到什么目的。如果要添加自定义列排序行为,可以查看 基本上,您可以在那里捕获MouseDown事件,然后查看用户是否单击了列标题。如果他这样做了,并且有一个事件分配给它,则可以执行此操作。处理此事件是否满足您的需要 我建议你 1-执行静态int变量 2-影响处理程序中的此变量::ColumnHeaderMouseClick 3-在handler:
AllowUserToOrderColumns = true;
如何检测列的重新排序 我不知道你到底想达到什么目的。如果要添加自定义列排序行为,可以查看
基本上,您可以在那里捕获
MouseDown
事件,然后查看用户是否单击了列标题。如果他这样做了,并且有一个事件分配给它,则可以执行此操作。处理此事件是否满足您的需要
- 我建议你
1-执行静态int变量
2-影响处理程序中的此变量::ColumnHeaderMouseClick
3-在handler::Sorted中选择包含此变量的行
例如:
private static int idRequetePourtriage = -1;
private void dgvRequete_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (dgvRequete.SelectedRows.Count > 0)
idRequetePourtriage = Convert.ToInt32(dgvRequete.SelectedRows[0].Cells[TEXT_colNameIdRequete].Value.ToString());
}
private void dgvRequete_Sorted(object sender, EventArgs e)
{
desactivateGridSelected();
int rowCount = 0;
Boolean isFind = false;
while (rowCount < dgvRequete.Rows.Count && !isFind)
{
if (idRequetePourtriage == Convert.ToInt32(dgvRequete.Rows[rowCount].Cells[TEXT_colNameIdRequete].Value.ToString()))
{
isFind = true;
activateGridSelected();
dgvRequete.Rows[rowCount].Selected = true;
}
rowCount++;
}
if (!isFind)
{
activateGridSelected();
}
}
private static int idRequestePourTriage=-1;
私有void dgvRequete_ColumnHeaderMouseClick(对象发送器,DataGridViewCellMouseEventArgs e)
{
如果(dgvRequete.SelectedRows.Count>0)
IDRequestePourTriage=Convert.ToInt32(dgvRequete.SelectedRows[0]。单元格[TEXT_colnameIDRequeste]。Value.ToString());
}
私有void dgvRequete_排序(对象发送方,事件参数e)
{
取消激活GridSelected();
int rowCount=0;
布尔值isFind=false;
while(rowCount
使用ColumnDisplayIndexChanged事件使用ColumnDisplayIndexChanged事件看起来像是正确的事件。这对我有用。(我会加上一条评论,我已经得到了它的代表。)
该事件的事件处理程序将包含反映该列新值的e.列。您要查找的属性是DisplayIndex。请注意,事件将针对更改了DisplayIndex的每一列触发
在vb.net中:
Private Sub data_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles data.ColumnDisplayIndexChanged
Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name)
End Sub
由于事件将在启动时触发(多次),因此您可能需要添加某种逻辑,以防止在添加列或根据先前的设置重新排列列时触发事件:
Private Sub dataAnts_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles dataAnts.ColumnDisplayIndexChanged
If bSortingColumns = False Then
Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name)
End If
End Sub
或者在启动代码完成后以编程方式添加事件处理程序
不确定为什么会将其标记为正确而不是错误。此事件将在许多其他情况下触发,如重新绑定数据表等。每次用户重新排序列时,此事件至少会触发两次。一次用于起点,一次用于终点,一次用于中间的每一列。根据您对事件所做的操作,这可能会带来很大的开销。如果您能够提供有关如何使用
ColumnDisplayIndexChanged
事件的一些详细信息,这将非常有用