DataView sortieren - Zeichenreihenfolge ändern?

19/02/2010 - 22:31 von Karl Heinz | Report spam
Hallo NG

kann ich die Reihenfolge von Sonderzeichen und Zahlen in den
Sortierkriterien eines DataViews beeinflussen?

Wenn ich z.B. folgende Strings sortieren lasse:

ASDF
ASFD01
ASDF'ASDF
ASDF01'ASDF

bekomme ich als Sotier Ergebnis folgendes:

ASDF
ASDF01
ASDF01'ASDF
ASDF'ASDF

ich möchte aber gerne dass das Sonderezeichen ' in der Reihenfolge vor
der 0 interpretiert wird, so dass als Ergebnis folgendes rauskommen
sollte:

ASDF
ASDF'ASDF
ASDF01
ASDF01'ASDF

Weis vielleicht jemand Rat?

Besten Dank vorab!

Gruß

Karl-Heinz
 

Lesen sie die antworten

#1 Frank Dzaebel
20/02/2010 - 01:42 | Warnen spam
Hallo Karl Heinz,

kann ich die Reihenfolge von Sonderzeichen und Zahlen in den
Sortierkriterien eines DataViews beeinflussen?



Ja, der normale Comparer ist "string.Compare".
Für Deine gewünschte Sortierung kannst Du
zum Beispiel CompareOrdinal benutzen. Etwa:

string[] strings = new string[] {
"ASDF", "ASDF01", "ASDF'ASDF", "ASDF01'ASDF"};
Array.Sort(strings, (a,b)=>string.CompareOrdinal(a,b));
________________

Dementsprechend beim DataView zum Beispiel:

// System.Data.DataSetExtensions.dll einbinden ...
//
private void Form1_Load(object sender, EventArgs e)
{
string[] strings = new string[] {
"ASDF", "ASDF01", "ASDF'ASDF", "ASDF01'ASDF"};

DataTable dt = new DataTable();
dt.Columns.Add("Name");
foreach (string s in strings) dt.Rows.Add(s);
var sortierterDataView = dt.AsEnumerable().OrderBy
<DataRow, string>(r => r.Field<string>("Name"),
new OrdinalComparer("Name")).AsDataView();
}

private class OrdinalComparer : IComparer<string>
{
string feldName;
private OrdinalComparer() { }
public OrdinalComparer(string feldName)
{
this.feldName = feldName;
}
public int Compare(string x, string y)
{
return string.CompareOrdinal(x, y);
}
}
_____________

Ggf. auch àhnlich, nur über:

return string.Compare(x, y,
CultureInfo.CurrentCulture,
CompareOptions.StringSort);

(Bei der Zeichenfolgensortierung (StringSort) werden Bindestriche
und Apostrophe sowie andere nicht alphanumerische Symbole
vor alphanumerischen Zeichen aufgeführt).


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen