Alteridin
Alteridin

Reputation: 23

Displaying DataTable Columns Side-By-Side C# Console Application

I am completely new at coding. I felt like I was learning quickly and then of course was humbled by all there is in this world. I am currently trying to figure out if you can print DataTable Columns beside each other instead of up and down.

Here is some code that I wrote(experimenting because I feel like I have no idea anymore):

private void DataClaimsTable()
        {
            Console.Clear();
            Queue<Claims> allInQueue = _claimsRepo.GetClaims();
            DataTable claimsDT = new DataTable("Komodo Insurance Claims");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine(String.Format("{0," + ((Console.WindowWidth / 2) + (claimsDT.TableName.Length / 2)) + "}", claimsDT));
            Console.ResetColor();
            DataColumn idColumn = new DataColumn("Claim ID", typeof(int));
            DataColumn typeColumn = new DataColumn("Claim Type", typeof(Enum));
            DataColumn descriptionColumn = new DataColumn("Description", typeof(string));
            DataColumn amountColumn = new DataColumn("Amount", typeof(decimal));
            DataColumn accidentColumn = new DataColumn("Date of Accident", typeof(DateTime));
            DataColumn claimColumn = new DataColumn("Date of Claim", typeof(DateTime));
            DataColumn validColumn = new DataColumn("Valid Claim", typeof(bool));
            claimsDT.Columns.Add(idColumn);
            claimsDT.Columns.Add(typeColumn);
            claimsDT.Columns.Add(descriptionColumn);
            claimsDT.Columns.Add(amountColumn);
            claimsDT.Columns.Add(accidentColumn);
            claimsDT.Columns.Add(claimColumn);
            claimsDT.Columns.Add(validColumn);
            DataRow idRow;
            Console.WriteLine(idColumn);
            foreach (Claims idPrint in allInQueue)
            {
                idRow = claimsDT.NewRow();
                idRow["Claim ID"] = idPrint.ClaimID;
                claimsDT.Rows.Add(idRow);
                Console.WriteLine(idRow[0]);
            }
            Console.WriteLine();
            DataRow typeRow;
            Console.WriteLine(typeColumn);
            foreach (Claims typePrint in allInQueue)
            {
                typeRow = claimsDT.NewRow();
                typeRow["Claim Type"] = typePrint.ClaimType;
                claimsDT.Rows.Add(typeRow);
                Console.WriteLine(typeRow[1]);
            }
            Console.WriteLine();
            DataRow descriptionRow;
            Console.WriteLine(descriptionColumn);
            foreach (Claims descriptionPrint in allInQueue)
            {
                descriptionRow = claimsDT.NewRow();
                descriptionRow["Description"] = descriptionPrint.ClaimDescription;
                claimsDT.Rows.Add(descriptionRow);
                Console.WriteLine(descriptionRow[2]);
            }
            Console.WriteLine();
            DataRow amountRow;
            Console.WriteLine(amountColumn);
            foreach (Claims amountPrint in allInQueue)
            {
                amountRow = claimsDT.NewRow();
                amountRow["Amount"] = amountPrint.ClaimAmount;
                claimsDT.Rows.Add(amountRow);
                Console.WriteLine(amountRow[3]);
            }
            Console.WriteLine();
            DataRow dateOfAccidentRow;
            Console.WriteLine(accidentColumn);
            foreach (Claims dateOfAccidentPrint in allInQueue)
            {
                dateOfAccidentRow = claimsDT.NewRow();
                dateOfAccidentRow["Date of Accident"] = dateOfAccidentPrint.DateOfAccident;
                claimsDT.Rows.Add(dateOfAccidentRow);
                Console.WriteLine(dateOfAccidentRow[4]);
            }
            Console.WriteLine();
            DataRow dateOfClaimRow;
            Console.WriteLine(claimColumn);
            foreach (Claims dateOfClaimPrint in allInQueue)
            {
                dateOfClaimRow = claimsDT.NewRow();
                dateOfClaimRow["Date of Claim"] = dateOfClaimPrint.DateOfClaim;
                claimsDT.Rows.Add(dateOfClaimRow);
                Console.WriteLine(dateOfClaimRow[5]);
            }
            Console.WriteLine();
            DataRow isValidRow;
            Console.WriteLine(validColumn);
            foreach (Claims isValidPrint in allInQueue)
            {
                isValidRow = claimsDT.NewRow();
                isValidRow["Valid Claim"] = isValidPrint.IsValid;
                claimsDT.Rows.Add(isValidRow);
                Console.WriteLine(isValidRow[6]);
            }
            Console.WriteLine();
        }

Output:

                                                Komodo Insurance Claims
Claim ID
1
2

Claim Type
Car
Home

Description
Rear bumper hit at traffic light.
Burned down due to unsupervised child.

Amount
3000.00
12000.00

Date of Accident
4/9/2020 12:00:00 AM
3/12/2020 12:00:00 AM

Date of Claim
4/9/2020 12:00:00 AM
4/14/2020 12:00:00 AM

Valid Claim
True
False


Press any key to continue...

Upvotes: 2

Views: 1090

Answers (2)

OhmnioX
OhmnioX

Reputation: 483

I have modified your existing code so that it can print the DataColumns beside each other.

Also, You don't need multiple for loops to map your Queue object to DataRow. Refer the below code for more information:

private static void DataClaimsTable()
    {
        Console.Clear();
        Queue<Claims> allInQueue = _claimsRepo.GetClaims();
        DataTable claimsDT = new DataTable("Komodo Insurance Claims");
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(String.Format("{0," + ((Console.WindowWidth / 2) + (claimsDT.TableName.Length / 2)) + "}", claimsDT));
        Console.ResetColor();
        DataColumn idColumn = new DataColumn("Claim ID", typeof(int));
        DataColumn typeColumn = new DataColumn("Claim Type", typeof(Enum));
        DataColumn descriptionColumn = new DataColumn("Description", typeof(string));
        DataColumn amountColumn = new DataColumn("Amount", typeof(decimal));
        DataColumn accidentColumn = new DataColumn("Date of Accident", typeof(DateTime));
        DataColumn claimColumn = new DataColumn("Date of Claim", typeof(DateTime));
        DataColumn validColumn = new DataColumn("Valid Claim", typeof(bool));
        claimsDT.Columns.Add(idColumn);
        claimsDT.Columns.Add(typeColumn);
        claimsDT.Columns.Add(descriptionColumn);
        claimsDT.Columns.Add(amountColumn);
        claimsDT.Columns.Add(accidentColumn);
        claimsDT.Columns.Add(claimColumn);
        claimsDT.Columns.Add(validColumn);
        DataRow idRow;
        Console.WriteLine(idColumn);
        foreach (Claims idPrint in allInQueue)
        {
            idRow = claimsDT.NewRow();
            idRow["Claim ID"] = idPrint.ClaimID;
            idRow["Claim Type"] = idPrint.ClaimType;
            idRow["Description"] = idPrint.ClaimDescription;
            idRow["Amount"] = idPrint.ClaimAmount;
            idRow["Date of Accident"] = idPrint.DateOfAccident;
            idRow["Date of Claim"] = idPrint.DateOfClaim;
            idRow["Valid Claim"] = idPrint.IsValid;
            claimsDT.Rows.Add(idRow);
        }
        PrintDataTable(claimsDT);
        Console.WriteLine();
    }

    private static void PrintDataTable(DataTable table)
    {
        Console.WriteLine("{0,10}\t{1,10}\t{2,10}\t{3,10}\t{4,25}\t{5,25}\t{6,10}",
           "Claim ID",
           "Claim Type",
           "Description",
           "Amount",
           "Date of Accident",
           "Date of Claim",
           "Valid Claim"
           );
        foreach (DataRow row in table.Rows)
        {
            Console.WriteLine("{0,10}\t{1,10}\t{2,10}\t{3,10}\t{4,25}\t{5,25}\t{6,10}",
                row["Claim ID"],
                row["Claim Type"],
                row["Description"],
                row["Amount"],
                row["Date of Accident"],
                row["Date of Claim"],
                row["Valid Claim"]
                );
        }
    }

The PrintDataTable method will print your datatable in the tabular format. In this the string is formatted properly with {0,10} where 10 indicates number of spaces to allocate and \t for allocating tab space. You can play around these values to properly format data. For more information on formatting the output data refer Microsoft document for Composite-Formatting

The following is the sample output: enter image description here

Upvotes: 3

Oleg Kyrylchuk
Oleg Kyrylchuk

Reputation: 1209

The approach looks like:

public void Print()
{
    Queue<Claims> allInQueue = _claimsRepo.GetClaims();

    PrintHeaders();
    foreach (var claim in allInQueue) 
    {
        PrintRow(claim);
    }
}

private void PrintHeaders()
{
    Console.Write("Claim ID"); // or you can use nameof(Claim.ClaimID)
    Console.Write(" ");
    Console.Write("Claim Type"); // or you can use nameof(Claim.ClaimType)
    Console.Write(" ");
    Console.Write("Description"); // or you can use nameof(Claim.ClaimDescription)
    Console.Write(" ");
    Console.Write("Amount"); // or you can use nameof(Claim.ClaimAmount)
    Console.Write(" ");
    Console.Write("Date of Accident"); // or you can use nameof(Claim.DateOfAccident)
    Console.Write(" ");
    Console.Write("Date of Claim"); // or you can use nameof(Claim.DateOfClaim)
    Console.Write(" ");
    Console.Write("Valid Claim"); // or you can use nameof(Claim.IsValid)
    Console.WriteLine();
}

private void PrintRow(Claims claim)
{
    Console.Write(Claim.ClaimID);
    Console.Write(" ");
    Console.Write(Claim.ClaimType);
    Console.Write(" ");
    Console.Write(Claim.ClaimDescription);
    Console.Write(" ");
    Console.Write(Claim.ClaimAmount);
    Console.Write(" ");
    Console.Write(Claim.DateOfAccident);
    Console.Write(" ");
    Console.Write(Claim.DateOfClaim);
    Console.Write(" ");
    Console.Write(Claim.IsValid);
    Console.Write(" ");
    Console.WriteLine();
}

Of course, this printing is ugly. But it's a direction you should to dig in. As Benjamin Collins wrote you in comments:

In general it's a matter of being patient and adding a bunch of | and _ characters and counting out spaces to make things look pretty.

Upvotes: 1

Related Questions