我试图重写datagridview的标准排序方法。如何让应用程序使用我的函数(方法?)而不是默认的?当用户点击某个列时,此事件应该会触发。覆盖表单事件
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
//Sort stuff.
}
我试图重写datagridview的标准排序方法。如何让应用程序使用我的函数(方法?)而不是默认的?当用户点击某个列时,此事件应该会触发。覆盖表单事件
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
//Sort stuff.
}
我觉得这个topic会对你很有意思,因为它符合你的要求。
一般而言,根据您的要求,您可以使用少量技术在DataGridView中进行自定义排序。
使用编程排序。 (您需要手动调用Sort)
使用SortCompare事件,该事件将在ColumnHeaderMouseClick上调用。 (对于绑定的DataGridView)
创建您自己的System.Collections.IComparer。 (用于未绑定的datagridview)
这两个都可以在msdn page here找到。 另请发现这个page解释何时可以使用哪种技术。
谢谢。我只需要添加'dataGridView1.ColumnHeaderMouseClick + = new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridView1_ColumnHeaderMouseClick);'DataGridViewColumnSortMode.Programmatic'的Form构造函数来开始使用我的方法。现在工作正常。 – natli 2012-04-07 18:17:58
不能覆盖事件,起因事件后实际控制方法执行引发的。 为了能够做点什么之前,你需要扩展DataGrid
控制和覆盖在它里面一个功能,就像这样:
一个pesudocode
public class MyDataGrid : DataGridView
{
public override void ColumnHeaderMouseClick(...)
{
//insert here your code and comment last line, so base class will not call it's own implementation
base.ColumnHeaderMouseClick(...); //after execution of this, the event is reaised
}
}
Riminder:这是一个如何处理这种情况的基本方法,你必须检查这个代码是否在你的案件。
希望这会有所帮助。
为什么不简单地把DataGridViewColumn.SortMode属性放到DataGridViewColumnSortMode.Programmatic中,然后实现你的System.Collections.IComparer并调用DataGridView1.Sort(new YourComparer())? – 2012-04-07 17:15:31
@AndriyBuday但是,当用户单击列标题时,如何使其调用'DataGridView1.Sort(new YourComparer())'?我不想使用单独的按钮... – natli 2012-04-07 17:25:23
还有SortCompare事件。请阅读此处:http://msdn.microsoft.com/en-us/library/ms171608.aspx。会有这样的事情为你工作吗? – 2012-04-07 17:28:30