Sie können auch linq- und anonyme Typen verwenden, um das gleiche Ergebnis mit viel weniger Code wie hier beschrieben zu erzielen .
UPDATE: Blog ist ausgefallen, hier ist der Inhalt:
(..) Die in der Tabelle angezeigten Werte stellen die Länge von Zeichenfolgen anstelle von Zeichenfolgenwerten dar (!). Es mag seltsam erscheinen, aber so funktioniert der Bindungsmechanismus standardmäßig - bei einem Objekt wird versucht, an die erste Eigenschaft davon zu binden Objekt (die erste Eigenschaft, die es finden kann). Wenn eine Instanz übergeben wird, ist die String-Klasse, an die sie gebunden wird, String.Length, da es keine andere Eigenschaft gibt, die den eigentlichen String selbst bereitstellen würde.
Das heißt, um unsere Bindung richtig zu machen, benötigen wir ein Wrapper-Objekt, das den tatsächlichen Wert eines Strings als Eigenschaft verfügbar macht:
public class StringWrapper
{
string stringValue;
public string StringValue { get { return stringValue; } set { stringValue = value; } }
public StringWrapper(string s)
{
StringValue = s;
}
}
List<StringWrapper> testData = new List<StringWrapper>();
Table1.SetDataBinding(testdata);
Diese Lösung funktioniert zwar wie erwartet, erfordert jedoch einige Codezeilen (hauptsächlich, um die Liste der Zeichenfolgen in die Liste der Zeichenfolgen-Wrapper zu konvertieren).
Wir können diese Lösung verbessern, indem wir LINQ und anonyme Typen verwenden. Wir verwenden die LINQ-Abfrage, um eine neue Liste von String-Wrappern zu erstellen (String-Wrapper ist in unserem Fall ein anonymer Typ).
var values = from data in testData select new { Value = data };
Table1.SetDataBinding(values.ToList());
Die letzte Änderung, die wir vornehmen werden, besteht darin, den LINQ-Code in eine Erweiterungsmethode zu verschieben:
public static class StringExtensions
{
public static IEnumerable CreateStringWrapperForBinding(this IEnumerable<string> strings)
{
var values = from data in strings
select new { Value = data };
return values.ToList();
}
Auf diese Weise können wir den Code wiederverwenden, indem wir eine einzelne Methode für eine beliebige Sammlung von Zeichenfolgen aufrufen:
Table1.SetDataBinding(testData.CreateStringWrapperForBinding());
DataPropertyName
der Spalte muss seinValue