Как вывести Клиента и его полное имя в DataGridView вместо цифр?
Нужно вывести вместо Client_ID (= 2) имя, соответствующее этому Client_ID в другой таблице. Связь между таблицами показана на скриншотах. Также есть скриншот результата работы программы.
Как это реализовать?
Код вывода в DataGridView (работает не так, как я хотел бы):
public partial class Form2 : Form
{
public Form2(int x)
{
string status;
InitializeComponent();
switch (x)
{
case 1: status = "Вы зашли как: Администратор";
label1.Text = status;
break;
case 2: status = "Вы зашли как: Мастер";
label1.Text = status;
break;
case 3: status = "Вы зашли как: Менеджер";
label1.Text = status;
break;
}
}
private void Form2_Load(object sender, EventArgs e)
{
DB database = new DB();
MySqlCommand command = new MySqlCommand("SELECT * FROM `queryautoservice` ORDER BY `ID` ", database.getCon());
database.openCon();
MySqlDataReader reader = command.ExecuteReader();
List<string[]> data = new List<string[]>();
while (reader.Read())
{
data.Add(new string[7]);
data[data.Count - 1][0] = reader[0].ToString();
data[data.Count - 1][1] = reader[1].ToString();
data[data.Count - 1][2] = reader[2].ToString();
data[data.Count - 1][3] = reader[3].ToString();
data[data.Count - 1][4] = reader[4].ToString();
data[data.Count - 1][5] = reader[5].ToString();
data[data.Count - 1][6] = reader[6].ToString();
}
reader.Close();
database.closeCon();
foreach (string[] s in data)
dataGridView1.Rows.Add(s);
}
}
}
Результат работы программы - выводит цифры а не имена:
Связи между таблицами:
Ответы (1 шт):
Для получения ФИО клиента вам требуется присоединить таблицу clients к queryautoservice (оператор INNER JOIN).
В SELECT укажите требуемые поля, в данном примере будут получены все значения таблицы queryautoservice и Name, SurName, Patronymic таблицы clients:
string query =
"SELECT qas.*, clients.Name, clients.SurName, clients.Patronymic " +
"FROM queryautoservice AS qas " +
"INNER JOIN clients ON qas.Clients_Id = clients.ID ";
MySqlCommand command = new MySqlCommand(query, database.getCon());
Обращаясь к reader вы можете получать значения по имени колонки:
while (reader.Read())
{
var row = new string[7];
row[0] = reader["Id"].ToString();
row[1] = reader["DateVisit"].ToString();
row[2] = reader["Dome"].ToString();
row[3] = reader["DateReady"].ToString();
row[4] = reader["Services_ID"].ToString();
row[5] = $"{reader["Name"]} {reader["SurName"]} {reader["Patronymic"]}";
row[6] = reader["Masters_ID"].ToString();
data.Add(row);
}
Если вам так же потребуется указать имя вместо Masters_Id или Services_Id добавьте INNER JOIN к ним. Пример:
string query =
"SELECT qas.*, clients.Name AS clietsName, clients.SurName, clients.Patronymic, masters.Name AS masterName, services.Name AS servicesName " +
"FROM queryautoservice as qas " +
"INNER JOIN clients ON qas.Clients_Id = clients.ID " +
"INNER JOIN masters ON qas.Masters_Id = masters.ID " +
"INNER JOIN services ON qas.Services_Id = services.ID ";
Обратите внимание, что имена колонок должны быть уникальными. Если вам требуется получить столбцы с одинаковым именем из разных таблиц, измените имя столбца оператором AS, и после получайте его из reader по новому имени.

