Hallo 😃
Ich habe eine Liste von Mitarbeitern mit Angaben, an welchen Tagen die da und an welchen die nicht da sind in einer DataTable gespeichert. Diese Liste benötige ich um den Dienst-Plan zu erstellen.
Sobald ein Mitarbeiter für den Dienst gesetzt wurde, soll er "ans Ende" der Liste gesetzt werden, damit erst alle Anderen wieder dran kommen. Dafür habe ich ein Column "Ticker" der mit jedem Eintrag hoch gezählt wird
Sobald einer ausgewählt wird, wird der Ticker wieder um eins erhöht und in den Ticker-Eintrag des ausgewählten Mitarbeiter geschrieben. Danach wird die Liste mit
dtHotline.DefaultView.Sort = "Ticker ASC";
dtHotline = dtHotline.DefaultView.ToTable();
wieder neu sortiert.
Das funktioniert auch genau so lange, bis der Wert im Feld Ticker die 10 erreicht. Danach bleibt der Eintrag mit dem Ticker 10 & aufwärts immer an erster Stelle in der DataTable, so als wenn er nicht nummerisch sortiert, sondern die 1 der 10 halt kleiner als die 9 des anderen Eintrag ist.
Ich hatte ursprünglich über die Anzahl sortiert, jedoch wird ein Mitarbeiter nach dem Urlaub dann erst mal x Mal eingesetzt, bis er auf dem gleichen Stand ist wie der Rest und das ist nicht gewollt.
Jemand eine Idee? Ich bin auch für andere (funktionierende) Lösungsansätze offen 😃
*Machts gut und danke für den vielen Fisch*
Die Ticker-Variable selber ist int & wird dem Feld im DataTable direkt zugewiesen.
Ich habe gerade Mal den Start Wert des Tickers auf 1000 gesetzt & jetzt sortiert er "korrekt".
Kann ich dem Feld irgendwie explizit sagen, dass es ein INT-Feld ist?
*Machts gut und danke für den vielen Fisch*
Hi DjBepy,
Du kannst einer DataColumn in der Property DataType den Typ "int" zuweisen. Dann funktioniert die Sortierung.
DataTable table=new DataTable();
DataColumn columnId=new DataColumn("ID");
//WICHTIG für Sortierung
columnId.DataType = typeof (int);
//Die Spalte ID muss als DataColumn übergeben werden,
//da vorher der DataType festgelegt werden musste.
table.Columns.Add(columnId);
table.Columns.Add("Text");
for (int i = 0; i < 12; i++)
{
DataRow row = table.NewRow();
row[0] = i;
row[1] = "Text" + i;
table.Rows.Add(row);
}
table.DefaultView.Sort = "ID ASC";
DataTable tableSorted = table.DefaultView.ToTable();
for (int i = 0; i < 12; i++)
{
var id = tableSorted.Rows[i][0].ToString();
var text = tableSorted.Rows[i][1].ToString();
Console.WriteLine(id + ": " + text);
}
Console.Read();