Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8771599
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 13, 20262026-06-13T17:49:49+00:00 2026-06-13T17:49:49+00:00

I want to generate a Pivot Datagridview in WinForms and EntityFramework, starting from theses

  • 0

I want to generate a Pivot Datagridview in WinForms and EntityFramework, starting from theses Entities:

public class Return
{
    public Return()
    {
        this.ReturnQty = new List<ReturnQty>();
    }

    public int Id { get; set; }
    public Nullable<System.DateTime> Date { get; set; }
    public Nullable<int> ReturnReason { get; set; }
    public Nullable<System.DateTime> Belastungsdatum { get; set; }
    public virtual ICollection<ReturnQty> ReturnQty  { get; set; }
}

public class ReturnQty
{
    public int ID { get; set; }
    public int Return_ID { get; set; }
    public string ItemNo { get; set; }
    public Nullable<decimal> Qty { get; set; }
    public virtual Return Return { get; set; }
}

The Pivot Dataviewgrid should look like this:

enter image description here

This is what I have now:

public static class ReturnReasons
{

    public static string a { get { return "Grund nicht erfasst"; } }
    public static string a1 { get { return "Artikel mangelhaft"; } }
    public static string a2 { get { return "Bestellirrtum Kunde"; } }
    public static string a3 { get { return "Doppelbestellung Kunde"; } }
    public static string a4 { get { return "AV Kunde"; } }
    public static string a5 { get { return "Kundenadresse falsch"; } }
    public static string a6 { get { return "Kunde nicht erreichbar"; } }
    public static string a7 { get { return "Kundenstorno"; } }
    public static string a8 { get { return "Nichtgefallen"; } }
    public static string a9 { get { return "Transportschaden UPS/DHL/GLS"; } }
    public static string a10 { get { return "Transportschaden Spedition"; } }
    public static string a11 { get { return "Transportschaden verdeckt"; } }
    public static string a12 { get { return "Kommissionierungsfehler"; } }
    public static string a13 { get { return "Fehler Auftragserfasung"; } }
    public static string a14 { get { return "Lieferverzögerung"; } }
    public static string a15 { get { return "Warenrücksendung lt. Vereinbarung"; } }
    public static string a16 { get { return "ohne Grund/sonstiges"; } }
}

        public class RetourenPivot
    {
        public string Item{ get; set; }
        public IEnumerable<int?> ReturnReason{ get; set; }
        public IEnumerable<decimal?> Qty{ get; set; }
    }

        private void DG_databind()
    {
        var query = _data.RepositoryRetouren.GetAll<ReturnQty>();
        // A Linq to EF which creates a List of concreate class called RetourenPivot.
        var queryResults = (from iso in query
                            orderby iso.ItemNo ascending
                            group iso by iso.ItemNo into isoGroup
                            select new RetourenPivot()
                            {
                                Item = isoGroup.Key,
                                ReturnReason = isoGroup.Select(y => y.Return.ReturnReason),
                                Qty = isoGroup.Select(v => v.Qty)
                            }).ToList();


        // Call a function to create a dynamically created data table with the needed columns

        // Create a DataTable as a DataSource for the grid
        DataTable dt = new DataTable();
        // Create the DataColumns for the data table
        DataColumn dc = new DataColumn("Artikel", typeof(string));
        dt.Columns.Add(dc);

        // Get a list of Distinct Reasons
        var ReasonLabel = (from yList in queryResults.Select(Reason => Reason.ReturnReason)
                           from Reason in yList
                           select Reason.ToString()).Distinct().ToList();

        // Create the DataColumns for the table
        ReasonLabel.ForEach(delegate(string Reason)
        {
            var reasonTexts = typeof(ReturnReasons).GetProperties().Where(p => p.Name == "a" + Reason).ToList()[0].GetValue(null, null).ToString();
            dc = new DataColumn(reasonTexts, typeof(string));
            dt.Columns.Add(dc);
        });

        // Populate the rowa of the DataTable
        foreach (RetourenPivot rec in queryResults)
        {
            // The first two columns of the row always has a ISO Code and Description
            DataRow dr = dt.NewRow();
            dr[0] = rec.Item;

            // For each record
            var Reason = rec.ReturnReason.ToList();
            var Qty = rec.Qty.ToList();

            // Because each row may have different reasons I am indexing
            // the with the string name
            for (int i = 0; i < Qty.Count; i++)
            {
                var reasonTexts = typeof(ReturnReasons).GetProperties().Where(p => p.Name == "a" + Reason[i].ToString()).ToList()[0].GetValue(null, null).ToString();
                dr[reasonTexts] = Qty[i].Value;
            }

            // Add the DataRow to the DataTable
            dt.Rows.Add(dr);
        }

        // Bind the DataTable to the DataGridView
        dataGridViewSummary1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
        dataGridViewSummary1.ColumnHeadersHeight = 200;

        //Connect Grid with DataSource
        //this.dataGridViewSummary1.AutoGenerateColumns = true;
        this.dataGridViewSummary1.DataSource = dt;
    }

The problem is, that each RetourenPivot in queryResults might have several quantities with the same ReturnReason and I don’t know how to sum them up.
E.g. now it looks like

Item 123
ReturnReason {0, 0, 0, 0, 1, 16}
Qty {1, 1, 2, 1, 5, 1}

What means, that for the reason 0 there are 4 quantities. It should look like

Item 123
ReturnReason { 0, 1, 16}
Qty {5, 5, 1}

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-13T17:49:50+00:00Added an answer on June 13, 2026 at 5:49 pm

    I hereby answer my own question. I don’t know if this solution is the best possible one.

    I created two temporary classes for the query

        public class RetourenNeu
        {
            public string Artikel { get; set; }
            public int? Retourengrund { get; set; }
            public decimal? Anzahl { get; set; }
        }
    
        public class RetourenPivot
        {
            public string Artikel { get; set; }
            public IEnumerable<int?> Retourengrund { get; set; }
            public IEnumerable<decimal?> Anzahl { get; set; }
        }
    

    And than I make two queries. The first query groups by ReturnReason and Itemnumber and sums up the quantities. The second query groups the first query by Itemnumber.

            var queryResults = from iso in query
                               orderby iso.Artikelnummer ascending
                               group iso by new { iso.Artikelnummer, iso.Retourenkopfdaten.Retourengrund } into isoGroup
                               select new RetourenNeu()
                               {
                                   Artikel = isoGroup.Key.Artikelnummer,
                                   Retourengrund = isoGroup.Key.Retourengrund.HasValue ? isoGroup.Key.Retourengrund.Value : 0,
                                   Anzahl = isoGroup.Select(v => v.Anzahl).Sum()
                               };
    
                var neu = (from n in queryResults
                       group n by n.Artikel into source
                       select new RetourenPivot()
                       {
                           Artikel = source.Key,
                           Retourengrund = source.Select(s => s.Retourengrund),
                           Anzahl = source.Select(s => s.Anzahl)
                       }).ToList();
    

    Now the result is as required.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Let's say I have a class of 30 students and want generate every possible
I want to generate an HTML table from a couple specified parameters. Specifically, the
I want to generate a bar graph from from a csv file my data
I want to generate a LaTeX document from Objective-C and compile it with pdfLatex
i want to generate current date and time in a format like this Mon,
I want to generate the random numbers using this loop. When i runs the
I want to generate a QR Code in a Job or Winforms app. My
I want generate a list of numbers from 0000 to 9999. I would then
I want to generate heat map from a set of data which is latitude
I want to generate some random IP Address. But evertime this generateIPAddress function returns

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.