Benutzer mit den meisten Antworten
c# nach vb

Frage
-
Hallo
kann/würde mir jemand die C# Zeilen nach VB übersetzen?
Zwei Zeilen, mit "//<<<< hier" gekennzeichnet.Danke Peter
public SortableBindingList() : base(new List<T>())
{
_sortDelegate = (list, comparison) => ((List<T>)list).Sort(comparison); //<<<< hier
}public SortableBindingList(IList<T> list) : base(list)
{
MethodInfo sortMethod = list.GetType().GetMethod("Sort", new[] { typeof(Comparison<T>) }); //<<<< hier
if (sortMethod == null || sortMethod.ReturnType != typeof(void))
{
throw new ArgumentException(
"The passed in IList<T> must support a \"void Sort(Comparision<T>)\" call or you must provide one using the other constructor.",
"list");
}_sortDelegate = CreateSortDelegate(list, sortMethod);
}
Antworten
-
Hallo Peter,
ungetestet aber in etwa so:
Public Class SortableBindingList(Of T) Inherits System.ComponentModel.BindingList(Of T) Private ReadOnly _sortDelegate As Action(Of IList(Of T), Comparison(Of T)) Public Sub New() MyBase.New(New List(Of T)) _sortDelegate = Sub(list, comparison) DirectCast(list, List(Of T)).Sort(comparison) End Sub Public Sub New(list As IList(Of T)) MyBase.New(list) Dim sortMethod = GetType(List(Of T)).GetMethod("Sort", {GetType(Comparison(Of T))}) If sortMethod Is Nothing OrElse sortMethod.ReturnType <> GetType(Void) Then Throw New ArgumentException( "The passed in IList<T> must support a ""void Sort(Comparision<T>)"" call or you must provide one using the other constructor.", "list") End If _sortDelegate = CreateSortDelegate(list, sortMethod) End Sub End Class
setzt voraus, dass der _sortDelegate so aussieht wie von mir eingefügt.
Gruß Elmar
- Bearbeitet Elmar BoyeEditor Mittwoch, 23. September 2015 07:03
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 28. September 2015 06:44
- Als Antwort markiert peter haus Mittwoch, 30. September 2015 13:44
Alle Antworten
-
Hallo Peter,
Zeile eins:
_sortDelegate = (list, comparison) => ((List<T>)list).Sort(comparison)
Zeile zwei:
Dim sortMethod As MethodInfo = list.GetType().GetMethod("Sort",New() As MethodInfo { Type.GetType(Comparison<T>) }
Siehe auch Tools wie bspw. http://www.dotnetspider.com/convert/Csharp-To-Vb.aspx
Thomas Claudius Huber
"If you can't make your app run faster, make it at least look & feel extremly fast"
My latest Pluralsight-courses:
XAML Layout in Depth
Windows Store Apps - Data Binding in Depth
twitter: @thomasclaudiush
homepage: www.thomasclaudiushuber.com -
Hallo
kann/würde mir jemand die C# Zeilen nach VB übersetzen?
Zwei Zeilen, mit "//<<<< hier" gekennzeichnet.Danke Peter
private readonly Action<IList<T>, Comparison<T>> _sortDelegate;
public SortableBindingList() : base(new List<T>())
{
_sortDelegate = (list, comparison) => ((List<T>)list).Sort(comparison); //<<<< hier
}public SortableBindingList(IList<T> list) : base(list)
{
MethodInfo sortMethod = list.GetType().GetMethod("Sort", new[] { typeof(Comparison<T>) }); //<<<< hier
if (sortMethod == null || sortMethod.ReturnType != typeof(void))
{
throw new ArgumentException(
"The passed in IList<T> must support a \"void Sort(Comparision<T>)\" call or you must provide one using the other constructor.",
"list");
}_sortDelegate = CreateSortDelegate(list, sortMethod);
}- Zusammengeführt Dimitar DenkovMicrosoft contingent staff, Moderator Mittwoch, 23. September 2015 07:00 Doppelpost
-
Hallo Peter,
ungetestet aber in etwa so:
Public Class SortableBindingList(Of T) Inherits System.ComponentModel.BindingList(Of T) Private ReadOnly _sortDelegate As Action(Of IList(Of T), Comparison(Of T)) Public Sub New() MyBase.New(New List(Of T)) _sortDelegate = Sub(list, comparison) DirectCast(list, List(Of T)).Sort(comparison) End Sub Public Sub New(list As IList(Of T)) MyBase.New(list) Dim sortMethod = GetType(List(Of T)).GetMethod("Sort", {GetType(Comparison(Of T))}) If sortMethod Is Nothing OrElse sortMethod.ReturnType <> GetType(Void) Then Throw New ArgumentException( "The passed in IList<T> must support a ""void Sort(Comparision<T>)"" call or you must provide one using the other constructor.", "list") End If _sortDelegate = CreateSortDelegate(list, sortMethod) End Sub End Class
setzt voraus, dass der _sortDelegate so aussieht wie von mir eingefügt.
Gruß Elmar
- Bearbeitet Elmar BoyeEditor Mittwoch, 23. September 2015 07:03
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 28. September 2015 06:44
- Als Antwort markiert peter haus Mittwoch, 30. September 2015 13:44
-
Hallo Elmar,
danke, der Code lässt sich so ausführen.
Ich versuche mich mal wieder mit EF vertraut zu machen, was mir allerdings sehr schwer fällt.
Ich finde es ist alle sehr kompliziert. Wobei es möglich ist, das ich das Vorgehen absolut nicht verstehe und zu sehr ado.net denke. Es fällt mir schwer anzunehmen, das ein Sortieren über den Header eines DataGridView so ein Umstand ist. Jedes mal die Liste mit Linq.OrderBy zu sortieren und wieder neu an DataGridView.DataSource zu hängen, kann es doch wohl nicht sein ?? Oder?Ich habe ein Stück Source gefunden
http://likeshares.com/questions/571711/datagridview-sort-and-eg-bindinglist-in-net
das dass sortieren des DataGridView möglich macht. Funktioniert bei Datum schon mal nicht.Hast du mir einen Link zu etwas, das Funktioniert und ich schauen kann wie es geht?
Vielen Dank und Gruss
Peter -
Hallo Peter,
eine Deiner wiederholten Versuche[1], Dich mit einem ORM (EF) anzufreunden?!
Ich glaube schon früher dazu geschrieben zu haben, dass ein ORM (EF/LinqToSql uam.) nicht wirklich mit der Windows Forms Technologie harmoniert. Denn deren Datenbindung ist auf das DataSet mit DataView usw. ausgelegt worden. Die BindingList(T) wiederum wurde nur halbherzig mit .NET 2.0 implementiert und nie vervollständigt.
Daraus resultieren diverse Einschränkungen, wie eben, dass das Klicken auf ein DataGridView nicht ohne Nachhilfe funktioniert.
Der Original Beitrag findet sich auf Stackoverflow: DataGridView sort and e.g. BindingList<T> in .NET und dort gibt es weitere zum Thema. Die Lösung mit dem SortDelegate ist IMHO eher umständlich und ich bezweifle, dass Du sie so überhaupt einsetzen wirst (würde heißen: eine eigene IList(Of T) implementieren).
Gruß Elmar
[1] Ein altes Schätzchen: http://www.tech-archive.net/Archive/German/Entwicklung/microsoft.public.de.german.entwickler.dotnet.datenbank/2009-08/msg00011.html