public int CompareTo(object obj) { Rennfahrer that = obj as Rennfahrer; int res; if (that == null) { return(0); } // "CompareTo()" method res = this.getPoints().CompareTo(that.getPoints()); if (res == 0) { int lthis = this.läufe.Count; int lthat = that.läufe.Count; for (int c = anzahlGewerteteLäufe + 1; c <= lthis && c <= lthat; c++) { res = this.getPoints(c).CompareTo(that.getPoints(c)); if (res != 0) { break; } } } return(res); }
private void button2_Click(object sender, EventArgs e) { //ofd1.InitialDirectory = "C:\\Users\\Daniel Zwygart\\Dropbox\\SEC Renndaten\\2019_Expert"; ofd1.InitialDirectory = Directory.GetCurrentDirectory(); ofd1.RestoreDirectory = true; ofd1.Multiselect = true; if (DialogResult.OK == ofd1.ShowDialog()) { files = ofd1.FileNames; } Excel.Application oXL; Excel._Workbook oWB; Excel._Worksheet oSheet; Excel.Range oRng; jahresrangliste.Clear(); läufe.Clear(); dataGridView1.Rows.Clear(); try { //Start Excel and get Application object. oXL = new Excel.Application(); oXL.Visible = false; // Daten einlesen foreach (string lauf in files) { bool added = false; int rang = 0; string nachname; string vorname; Rennfahrer rennfahrer; int rCnt; int cCnt; int rw = 0; int cl = 0; int platzSpalte = 1; int vornameSpalte = 4; int nachnameSpalte = 3; string[] words = lauf.Split('_'); string laufName = words[words.Length - 1].Split('.').First(); int laufNummer = Convert.ToInt16(words[words.Length - 2]); klasse = words[words.Length - 3]; jahr = words[words.Length - 4].Split('\\').Last(); path = Path.GetDirectoryName(lauf); label4.Text = "Jahresrangliste " + klasse + " " + jahr; läufe.Add(new Lauf(laufName, laufNummer, 0)); try { //Get a the workbook. oWB = oXL.Workbooks.Open(lauf, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); oSheet = (Excel.Worksheet)oWB.Worksheets.get_Item(1); oRng = oSheet.UsedRange; rw = oRng.Rows.Count; cl = oRng.Columns.Count; for (cCnt = 1; cCnt <= cl; cCnt++) { string header = (string)(oRng.Cells[1, cCnt] as Excel.Range).Value2; if (header == "Platz") { platzSpalte = cCnt; } if (header == "Nachname") { nachnameSpalte = cCnt; } if (header == "Vachname") { vornameSpalte = cCnt; } } for (rCnt = 2; rCnt <= rw; rCnt++) { added = false; if (Convert.ToInt16((oRng.Cells[rCnt, 1] as Excel.Range).Value2) != 0) { rang = Convert.ToInt16((oRng.Cells[rCnt, 1] as Excel.Range).Value2); //Bei mehreren gleichen Rängen den Rang von vorher übernehmen } nachname = (string)(oRng.Cells[rCnt, nachnameSpalte] as Excel.Range).Value2; vorname = (string)(oRng.Cells[rCnt, vornameSpalte] as Excel.Range).Value2; foreach (Rennfahrer r in jahresrangliste) { if (r.nachname == nachname && r.vorname == vorname) { r.Add(laufName, laufNummer, rangZuPunkte(rang)); added = true; break; } } if (added == false) { rennfahrer = new Rennfahrer(vorname, nachname, läufeZuGewerteteLäufe(files.Length)); rennfahrer.Add(laufName, laufNummer, rangZuPunkte(rang)); jahresrangliste.Add(rennfahrer); } } oWB.Close(); } catch { } } // Daten verarbeiten jahresrangliste.Sort(); jahresrangliste.Reverse(); läufe.Sort(); // Daten ausgeben dataGridView1.ColumnCount = 4 + läufe.Count; dataGridView1.Columns[0].Name = "Rang"; dataGridView1.Columns[1].Name = "Nachname"; dataGridView1.Columns[2].Name = "Vorname"; for (int i = 0; i < läufe.Count; i++) { dataGridView1.Columns[i + 3].Name = läufe[i].name; } dataGridView1.Columns[dataGridView1.ColumnCount - 1].Name = "Total"; int rangNeu = 0; int punkteVorangegangener = -1; int anzahlGleiche = 1; foreach (Rennfahrer r in jahresrangliste) { if (punkteVorangegangener != r.getPoints()) { rangNeu += anzahlGleiche; // anzahlGleiche = 1; } else { anzahlGleiche++; } List <string> row = new List <string> { rangNeu.ToString(), r.nachname, r.vorname }; for (int i = 0; i < läufe.Count; i++) { bool found = false; for (int n = 0; n < r.läufe.Count; n++) { if (r.läufe[n].name == läufe[i].name && r.läufe[n].nummer == läufe[i].nummer) { found = true; row.Add(r.läufe[n].punkte.ToString()); break; } } if (found == false) { row.Add(null); } } row.Add(r.getPoints().ToString()); punkteVorangegangener = r.getPoints(); dataGridView1.Rows.Add(row.ToArray <string>()); } } catch { } }