Передача данных с БД в DataGrid, работа с гридом

187
16 сентября 2021, 16:30

Такой вопрос

У меня есть две таблицы связанные между собой users и posts

Есть DataGrid

Мне нужно по нажатию кнопки, вытянуть все логины в столбец Users мой вариант:

private void postGridBtn_Click(object sender, EventArgs e)
        {
            var loadData = cs.LoadFile("DataConnection.xml");
            string connString = String.Format("User Id={0};Host={1};Database={2};PWD={3}", loadData.UserId, loadData.Host, loadData.Database, loadData.PWD);
            using (NpgsqlConnection conn = new NpgsqlConnection(connString))
            {
                conn.Open();
                using (NpgsqlCommand cmd = new NpgsqlCommand("select * from users", conn))
                {
                    NpgsqlDataReader dr = cmd.ExecuteReader();
                    List<string[]> data = new List<string[]>();
                    while (dr.Read())
                    {
                        data.Add(new string[1]);
                        data[data.Count - 1][0] = dr[1].ToString();
                    }
                    dr.Close();
                    conn.Close();
                    foreach (string[] s in data)
                    {
                        postsDataGridView.Rows.Add(s);
                    }
                }
            }
        }

и далее, чтобы по клику ячейки с определенным юзером, в колонке PostText появлялись все сообщения связанные с этим юзером, при нажатии на другого, колонка с текстом обновлялась только с его сообщениями.

Либо грид разбить на два грида (Users и PostText соотвественно) и связать их

Как такое можно реализовать? Спасибо за помощь

Новое решение

private void GetData()
        {
            try
            {
                var loadData = cs.LoadFile("DataConnection.xml");
                string connString = String.Format("User Id={0};Host={1};Database={2};PWD={3}", loadData.UserId, loadData.Host, loadData.Database, loadData.PWD);
                // Specify a connection string. Replace the given value with a 
                // valid connection string for a Northwind SQL Server sample
                // database accessible to your system.
                NpgsqlConnection connection = new NpgsqlConnection(connString);
                // Create a DataSet.
                DataSet data = new DataSet();
                data.Locale = System.Globalization.CultureInfo.InvariantCulture;
                // Add data from the Customers table to the DataSet.
                NpgsqlDataAdapter usersDataAdapter = new NpgsqlDataAdapter("select * from users", connection);
                usersDataAdapter.Fill(data, "users");
                // Add data from the Orders table to the DataSet.
                NpgsqlDataAdapter postsDataAdapter = new NpgsqlDataAdapter("select * from posts", connection);
                postsDataAdapter.Fill(data, "posts");
                // Establish a relationship between the two tables.
                DataRelation relation = new DataRelation("UsersPosts",
                    data.Tables["users"].Columns["ID"],
                    data.Tables["posts"].Columns["UsersIDRecipient"]);
                data.Relations.Add(relation);
                // Bind the master data connector to the Customers table.
                BindingSource usersBindingSource = new BindingSource();
                BindingSource postsBindingSource = new BindingSource();
                usersBindingSource.DataSource = data;
                usersBindingSource.DataMember = "users";
                postsBindingSource.DataSource = usersBindingSource;
                postsBindingSource.DataMember = "UsersPosts";

                usersDataGridView.DataSource = usersBindingSource;
                postsDataGridView.DataSource = postsBindingSource;
            }
            catch (SqlException)
            {
                MessageBox.Show("To run this example, replace the value of the " +
                    "connectionString variable with a connection string that is " +
                    "valid for your system.");
            }

        }

Ошибка, когда меняю запрос на NpgsqlDataAdapter usersDataAdapter = new NpgsqlDataAdapter("select Login from users", connection);

Пробывал еще экранировать кавычками NpgsqlDataAdapter usersDataAdapter = new NpgsqlDataAdapter("select \"Login\" from users", connection); выдает другую ошибку

Answer 1
  1. нужно два грида
  2. создайте два класса users и posts
  3. свяжите данные гидов с классами users и posts (databinding)
READ ALSO
Делегаты и события

Делегаты и события

Создать класс Банк, с использование события ввода пин-кода(если неверный, повторить попытку) снятие и пополнение на счетКласс создал, но с пин-кодом...

297
Task завершается через 15 минут работы

Task завершается через 15 минут работы

Написал программу которая должна раз в секунду проверять ping до двух серверовПроблема в том, что примерно через 15 минут таски перестают выполняться

157
Изменение места в рейтинге

Изменение места в рейтинге

Есть таблица рейтинга, столбцы Участник, Место и Баллы Вот строки

168