Я не понимаю форматирование из вывода этого кода - PullRequest
1 голос
/ 19 ноября 2011

Как видно из заголовка, мой фрагмент кода взят из примера, предоставленного моим профессором.

Мой вывод:

MagazineID Title Publisher Price SubscriptionRate 
1 People Times Inc. 4.95 19.95 
2 Car and Driver Hachetter Inc. 3.95 19.99 

Код:

    private void btnShowMags_Click(object sender, EventArgs e)
    {
        // Creating new instance of the DisplayMags form.
        DisplayMags displayMags = new DisplayMags();

        // find the path where the executable resides
        string dbPath = Application.StartupPath;

        // Providing a path to the MS Access file.
        string connString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="
            + dbPath + @"\..\..\..\..\Magazines.mdb; User Id=admin; Password=";

        // Creating a new connection and assigning it to a variable.
        OleDbConnection conn = new OleDbConnection();
        conn.ConnectionString = connString;

        // Creating a new instance for a command which we will use later.
        OleDbCommand cmd = new OleDbCommand();
        cmd.Connection = conn;

        // declare and instantiate the command
        OleDbCommand cmdMagazines = new OleDbCommand();
        cmdMagazines.CommandText = "select * from magazine";
        cmdMagazines.Connection = conn;

        OleDbDataReader drMagazines;

        try
        {
            // open the connection
            conn.Open();

            // retrieve data from the data source to the data reader
            drMagazines = cmdMagazines.ExecuteReader();

            if (drMagazines.HasRows)
            {
                // populate the column headings
                for (int i = 0; i < drMagazines.FieldCount; i++)
                    displayMags.txtDisplayMags.Text += drMagazines.GetName(i) + " ";
                displayMags.txtDisplayMags.Text += "\r\n";

                // populate the data by row
                while (drMagazines.Read())
                {
                    for (int i = 0; i < drMagazines.FieldCount; i++)
                        displayMags.txtDisplayMags.Text += drMagazines.GetValue(i) + " ";
                    displayMags.txtDisplayMags.Text += "\r\n";
                }
            }
        }
        catch (Exception ex)
        {
            // Displaying any errors that might have occured.
            MessageBox.Show("Error opening the connection: " + ex.Message + "\r\n");
        }
        finally
        {
            // Closing connection after task was completed.
            conn.Close();
        }

        // Displaying DisplayMags form, assuring that earlier form
        // will not be accessible. Show() let us access all forms.
        displayMags.ShowDialog();
    }

И я пытаюсь, чтобы это выглядело так:

enter image description here

РЕДАКТИРОВАТЬ.Это работа, но соответствует ли это правильной практике программирования?

            if (drMagazines.HasRows)
            {
                while (drMagazines.Read())
                {
                    displayMags.txtDisplayMags.Text += "=== Magazine " + 
                        drMagazines.GetValue(0) + " ===" + Environment.NewLine + 
                        drMagazines.GetValue(1) + Environment.NewLine +
                        drMagazines.GetValue(2) + Environment.NewLine +
                        drMagazines.GetValue(3) + Environment.NewLine +
                        drMagazines.GetValue(4) + Environment.NewLine + 
                        Environment.NewLine;
                }
            }

1 Ответ

3 голосов
/ 19 ноября 2011

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

Ваш вывод начинается в блоке, начинающемся с if (drMagazines.HasRows). Код в этом блоке - то, где вам нужно внести изменения.

Вам нужно изменить его так, чтобы вместо распечатки заголовков столбцов, а затем содержимого каждой строки, вы печатали разделитель, включающий номер журнала, конец строки (Environment.NewLine), а затем отдельные строки с заголовками а затем содержание.

Теперь у вас есть необходимая информация в вашем коде - у вас есть комментарии, где вы populate the column headings, а затем populate the data by row. Измените это так, чтобы вы populate a single heading, а затем populate the row content for that heading. Было бы предложено изменить его с двух циклов на один - прочитать заголовок столбца, а затем содержимое строки, которое он содержит. Вы можете добавить любой дополнительный контент или форматирование во время этого цикла для каждого элемента.

...