Extendiendo la clase listview para ordenanmiento

20/02/2006 - 20:28 por José Miguel Torres | Informe spam
Hola, necesito agregar a un listview la funcionalidad de ordenamiento . Ya
consulte este articulo
http://msdn.microsoft.com/library/d...ttopic.asp
pero yo no quiero tener el código en el form, lo que quiero es crear un
componente que extienda la clase listview y que este haga todo el trabajo
pero me está dando dos problemas:
1. En la linea this.ColumnClick+=new ColumnClickEventHandler(ColumnClick);
me da ... denotes a 'method' which is not valid in the given context.
2. Si cambio la linea por this.ColumnClick+=new
ColumnClickEventHandler(ColumnClick2); notece que se le agregó un dos al
nombre del evento compila bien pero el codigo dentro de ColumnClick2 no se
ejecuta.

Gracias x su ayuda.


CÓDIGO COMPLETO:

using System;
using System.Collections;
using System.Drawing;
using System.Windows.Forms;
using System.Globalization;
using System.Runtime.InteropServices;

namespace cl_Mantenimientos.CustomControl
{

public class CustomListView : System.Windows.Forms.ListView
{
private System.ComponentModel.Container components = null;
public CustomListView(System.ComponentModel.IContainer container)
{
container.Add(this);
InitializeComponent();
}

public CustomListView()
{
InitializeComponent();
this.Sorting =SortOrder.None;
this.View=View.Details;
this.ColumnClick+=new ColumnClickEventHandler(ColumnClick2);
}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}

private void ColumnClick2(object o, ColumnClickEventArgs e)
{
this.ListViewItemSorter = new ListViewItemComparer(e.Column);
MessageBox.Show ("entró");

}

}
class ListViewItemComparer : IComparer
{
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer(int column)
{
col = column;
}
public int Compare(object x, object y)
{
return String.Compare(((ListViewItem)x).SubItems[col].Text,
((ListViewItem)y).SubItems[col].Text);
}
}
}
 

Leer las respuestas

#1 Octavio Hernandez
21/02/2006 - 00:31 | Informe spam
Hola JM,

Lo que debes hacer tú no es definir un evento, sino redefinir el método
virtual OnColumnClick() de ListView para que haga las cosas que tú quieres
que haga, y sin olvidar al final hacer la llamada al método redefinido
base.OnColumnClick(), que es donde está "cableada" la (posible) llamada a la
cadena de delegados asociada al evento.

Mira este enlace:

http://msdn.microsoft.com/library/d...ktopic.asp

Slds - Octavio


"José Miguel Torres" escribió en
el mensaje news:
Hola, necesito agregar a un listview la funcionalidad de ordenamiento . Ya
consulte este articulo
http://msdn.microsoft.com/library/d...ttopic.asp
pero yo no quiero tener el código en el form, lo que quiero es crear un
componente que extienda la clase listview y que este haga todo el trabajo
pero me está dando dos problemas:
1. En la linea this.ColumnClick+=new ColumnClickEventHandler(ColumnClick);
me da ... denotes a 'method' which is not valid in the given context.
2. Si cambio la linea por this.ColumnClick+=new
ColumnClickEventHandler(ColumnClick2); notece que se le agregó un dos al
nombre del evento compila bien pero el codigo dentro de ColumnClick2 no
se
ejecuta.

Gracias x su ayuda.


CÓDIGO COMPLETO:

using System;
using System.Collections;
using System.Drawing;
using System.Windows.Forms;
using System.Globalization;
using System.Runtime.InteropServices;

namespace cl_Mantenimientos.CustomControl
{

public class CustomListView : System.Windows.Forms.ListView
{
private System.ComponentModel.Container components = null;
public CustomListView(System.ComponentModel.IContainer container)
{
container.Add(this);
InitializeComponent();
}

public CustomListView()
{
InitializeComponent();
this.Sorting =SortOrder.None;
this.View=View.Details;
this.ColumnClick+=new ColumnClickEventHandler(ColumnClick2);
}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}

private void ColumnClick2(object o, ColumnClickEventArgs e)
{
this.ListViewItemSorter = new ListViewItemComparer(e.Column);
MessageBox.Show ("entró");

}

}
class ListViewItemComparer : IComparer
{
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer(int column)
{
col = column;
}
public int Compare(object x, object y)
{
return String.Compare(((ListViewItem)x).SubItems[col].Text,
((ListViewItem)y).SubItems[col].Text);
}
}
}


Preguntas similares