Отображение столбцов DataTable бок о бок C# Консольное приложение - PullRequest
2 голосов
/ 10 апреля 2020

Я совершенно новичок в кодировании. Я чувствовал, что быстро учусь, а потом, конечно, смирился все, что есть в этом мире. В настоящее время я пытаюсь выяснить, можете ли вы печатать столбцы DataTable рядом друг с другом, а не вверх и вниз.

Вот код, который я написал (экспериментируя, потому что я чувствую, что понятия не имею):

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();
        }

Вывод:

                                                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...

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Я изменил ваш существующий код, чтобы он мог печатать столбцы данных рядом друг с другом.

Кроме того, вам не нужно несколько циклов for для сопоставления вашего объекта Queue с DataRow. Для получения дополнительной информации обратитесь к приведенному ниже коду:

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"]
                );
        }
    }

Метод PrintDataTable напечатает вашу таблицу данных в табличном формате. В этом случае строка правильно отформатирована с {0,10}, где 10 указывает количество мест для выделения и \t для выделения места табуляции. Вы можете поиграться с этими значениями, чтобы правильно отформатировать данные. Для получения дополнительной информации о форматировании выходных данных см. Документ Microsoft для Composite-Formatting

Ниже приведен пример вывода: enter image description here

1 голос
/ 10 апреля 2020

Подход выглядит так:

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();
}

Конечно, эта печать уродлива. Но это направление, в которое вы должны вникнуть. Как Бенджамин Коллинз написал вам в комментариях:

В общем, это вопрос терпения и добавления группы | и _ символы и подсчет пробелов, чтобы все выглядело красиво.

...