как отобразить данные в таблице данных, полученные из объединенных таблиц и таблицы 1, и у двух есть столбцы с одинаковыми именами

#c# #sql #wpf #xaml #datagrid

#c# #sql #wpf #xaml #datagrid

Вопрос:

У меня есть datagrid, в котором я отображаю свои данные из itemsource, который объединил таблицы. Как я могу создать столбец в datagrid для полей с одинаковыми именами? Я попробовал что-то вроде Binding=»{Привязка table1.name }» и привязка=»{Привязка table2.name }», но он показывает пустой. это тот же мой код: XAML:

  <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" VerticalAlignment="Top" Height="227" Width="1102" Margin="0,202,0,0" 
           ItemsSource="{Binding DataSource}" AutoGenerateColumns="False" IsReadOnly="True">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name1" Binding="{Binding table1.name}" Width="300" />
            <DataGridTextColumn Header="Name2" Binding="{Binding table2.name}" Width="300"/>                
        </DataGrid.Columns>
    </DataGrid>
  

мой код, лежащий в основе:

 public void ocitajTabelu()
    {
        using (SqlConnection sc = new SqlConnection(ConString))
        {
            sc.Open();
            string query = "select * from table1 left join table2 on table1.name_id = table2.id where table.order_id=@id";

            SqlCommand com = new SqlCommand(query, sc);
            com.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32(selectedID);

            using (SqlDataAdapter adapter = new SqlDataAdapter(com))
            {
                DataTable dt = new DataTable();
                adapter.Fill(dt);
                adapter.Update(dt);
                dataGridPretragaObjekta.ItemsSource = dt.DefaultView;
            }
            sc.Close();
        }
    }
  

Комментарии:

1. выбор * — плохая практика (что, если ваши таблицы вырастут до десятков столбцов, а вам нужен только 1?). Но вы должны использовать псевдоним столбца (выберите table1.foo foo1, table2.foo foo2 …)

2. @KevinRaffay Вы должны опубликовать это в качестве ответа

3. да, но здесь это не проблема. или вы говорите мне, что если вместо select * у меня есть select table1.name , выберите table2.name это сработает?

4. Это должно быть, потому что тогда вы могли бы привязаться к table1.foo1 и table2.foo2 — у них будут разные имена столбцов.

Ответ №1:

выбор * — плохая практика (что, если ваши таблицы вырастут до десятков столбцов, а вам нужен только 1?). Но вы могли бы создать псевдоним для столбца (выберите table1.foo foo1, table2.foo foo2 …)

Это должно сработать, потому что тогда вы могли бы привязаться к table1.foo1 и table2.foo2 — у них будут разные имена столбцов.