Announcement

Collapse
No announcement yet.

Datenanordnung in einer DataGridView

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenanordnung in einer DataGridView

    Hallo,

    ich bin grad am Verzweifeln, weil ich nicht weiß, wie ich dieses (vermutlich) simple Problem lösen kann.

    Folgender Code
    Code:
    for (int x = start.year; x <= end.year; x++)
    {
    	DataTable dt = AmountYear(myArr, date1, date2, x);
    	for (int y = 0; y < dt.Rows.Count; y++)
            {
                DataRow dr = dtKeys.NewRow();
                dr["ID"] = dt.Rows[y]["Id"];
                dr["Key"] = dt.Rows[y]["Key"];
                dr["year"+x.ToString()] = dt.Rows[y]["year"];
                dtKeys.Rows.Add(dr);
            }
    	dataGridView1.DataSource = dtKeys;
    }
    Dadurch erhalte ich aktuelle folgende Darstellung in der DataGridView
    Id-----------Key---------------year2010-------------year2011-----------------year2012
    123---------kGyy23A-----------3
    632---------hsgD1M2-----------12
    123---------kGyy23A--------------------------------5
    632---------hsgD1M2-------------------------------13
    123---------kGyy23A---------------------------------------------------------2
    632---------hsgD1M2---------------------------------------------------------17

    Ziel sollte folgende Darstellung sein
    Id--------Key---------year2010----------year2011------------year2012
    123------kGyy23A-----3-----------------5--------------------2
    632------hsgD1M2-----12----------------13------------------17


    Die "-" Striche stehen nur zur Verdeutlichung des Problems.


    Ich stehe grad echt auf dem Schlauch wie ich die Abfrage anpassen muss, damit ich die gewünscht Ausgabe erhalte?!?!
    Hoffe Ihr könnt mir helfen - danke!
    Zuletzt editiert von Bonaqua; 20.08.2015, 11:38. Reason: Falsche Variablenbezeichnung

  • #2
    zu den Möglichkeiten in C# bzw. im Grid kann ich nichts sagen, die zugrundeliegenden Daten können aber sicherlich per Abfrage zusammengefasst werden:
    [highlight=sql]
    select Id, Key, sum(year2010) as year2010, sum(year2011) as year2011, sum (year2012) as year2012 from mytable
    group by Id, Key
    [/highlight]
    ggF. müssen die fehlenden Werte (NULL) noch durch '0' ersetzt werden, bevor summiert wird.
    Gruß, defo

    Comment


    • #3
      Die Abfrage ist leider schon fix, d.h. daran kann ich nichts mehr ändern.

      Comment


      • #4
        Man nimmt für 2 ineinandergeschachtelte Schleifen nicht die gleiche Variable
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Man nimmt für 2 ineinandergeschachtelte Schleifen nicht die gleiche Variable
          Das stimmt natürlich! Fehler ist aber nur beim Code hier - werde ich korrigieren!

          Comment


          • #6
            Du legst jedesmal eine neue Row an auch wenn die gleiche ID, Key Kombination nochmal mit einem anderen Jahr kommt. Du musst die zusätzlichen Daten natürlich schon in den eventuell bereits vorhandenen Datensatz schreiben.
            Dazu könnte man zum Beispiel die Rows.Find Methode der DataTable verwenden(siehe unten). Dazu muß ID und Key aber als PrimaryKey der DataTable definiert sein. Alternativ ginge auch DataTable.Select


            [HIGHLIGHT=C#]
            for (int y = 0; y < dt.Rows.Count; y++)
            {
            DataRow dr = dtKeys.Rows.Find(new object[] { dt.Rows[y]["ID"], dt.Rows[y]["Key"] });
            if (dr == null)
            {
            dr = dtKeys.NewRow();
            dr["ID"] = dt.Rows[y]["ID"];
            dr["Key"] = dt.Rows[y]["Key"];
            dtKeys.Rows.Add(dr);
            }
            dr["year"+x.ToString()] = dt.Rows[y]["year"];
            }
            dataGridView1.DataSource = dtKeys;[/HIGHLIGHT]

            Comment

            Working...
            X