2016-07-21 2 views
1

Я перешел на этот сложный SQL-запрос, пытаясь сделать приложение для существующей базы данных, и он переносится в DataGrid.Сложная привязка данных SQL-запроса к DataGrid

private void buttonlaunch_Click(object sender, EventArgs e) 
    { 
     dataAkt.DataContext = GetComments("SELECT a1.*, inspectors.cFullName, organizations.cOrgName, d1.cString, d2.cString, d3.cString, towns.cTownName " + 
              "FROM akt as a1 "+ 
              "left join inspectors on a1.nDocInspektor = inspectors.ROWID "+ 
              "left join organizations on organizations.nDirectoryType = organizations.ROWID "+ 
              "left join directories as d1 on a1.nOrgFormVlast = d1.ROWID "+ 
              "left join directories as d2 on a1.nOrgVidPidpr = d2.ROWID "+ 
              "left join directories as d3 on a1.nOrgVidEPDial = d3.ROWID "+ 
              "left join towns on a1.nDocMisceSkladannya=towns.ROWID").DefaultView; 
    } 

в XAML

<DataGrid x:Name="dataAkt" ItemsSource="{Binding}" AutoGenerateColumns="False" HorizontalAlignment="Left" VerticalAlignment="Top" SelectionChanged="dataAkt_SelectionChanged" Margin="10,10,0,0"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Path=cName}" Header="Название/комментарий" Width="100" IsReadOnly="True" Visibility="Collapsed" /> 
     <DataGridTextColumn Binding="{Binding Path=ROWID}" Header="Номер" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cDocNomer}" Header="Номер документа" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=dDocDate, StringFormat=\{0:dd.MM.yyyy\}}" Header="Дата составления" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cOrgName}" Header="Субъект хозяйствования" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cFullName}" Header="Персонал ГОСТРУД" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cDocUch1}" Header="При участии" Width="100" IsReadOnly="True"/> 
     <DataGridTextColumn Binding="{Binding Path=organizations.cOrgName}" Header="Тип организации" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=d1.cString}" Header="Форма собственности" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=d2.cString}" Header="Вид предпринимательства" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=d3.cString}" Header="Вид экономической деятельности" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=towns.cTownName}" Header="Место составления" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cOrgAdresa}" Header="Адрес организации" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cOrgPhoneFax}" Header="Телефон/Факс" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cPosPIB}" Header="Фамилия, имя, отчество" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cPosPosada}" Header="Должность" Width="100" IsReadOnly="True"/> 
     <DataGridTextColumn Binding="{Binding Path=fPerZaborg}" Header="Задолженность, тыс. руб" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=fPerZaborgZv}" Header="Зад. уволенным, тыс. руб" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=MyBoolValue, Converter={StaticResource BooleanToStringConverter}}" Header="Проверка в ночное время" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=nPerPropoz}" Header="Внесено предложений" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cOrgIndKod}" Header="Идентификационный номер" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cOrgFormVlastKod}" Header="Код формы собственности" Width="100" IsReadOnly="True" /> 
     <DataGridTextColumn Binding="{Binding Path=cOrgVidEPDialKod}" Header="Код вида экономической деятельности" Width="100" IsReadOnly="True" /> 
    </DataGrid.Columns> 

MySQL Workbench дает мне получившуюся таблицу со всеми столбцами, что мне нужно, но в dataAkt colunms organizations.cOrgNamed1.cStringd2.cStringd3.cString coluns являются emply. Не могу решить почему.

ответ

2

Вам нужно указать знаковые псевдонимы в свои столбцы. У вас есть:

organizations.cOrgName AS ocOrgName, d1.cString, d2.cString, d3.cString ... 

Изменить это:

organizations.cOrgName AS ocOrgName, d1.cString AS d1cString, d2.cString AS d2cString, d3.cString AS d3cString ... 

Теперь вы можете правильно привязать к столбцам, как это:

<DataGridTextColumn Binding="{Binding Path=ocOrgName}" Header="Тип организации" Width="100" IsReadOnly="True" /> 
<DataGridTextColumn Binding="{Binding Path=d1cString}" Header="Форма собственности" Width="100" IsReadOnly="True" /> 
<DataGridTextColumn Binding="{Binding Path=d2cString}" Header="Вид предпринимательства" Width="100" IsReadOnly="True" /> 
<DataGridTextColumn Binding="{Binding Path=d3cString}" Header="Вид экономической деятельности" Width="100" IsReadOnly="True" /> 

Проблема в том, что столбец выбран towns.cTownName не будет получите имя towns.cTownName в результирующем наборе, оно будет называться cTownName, без префикса таблицы. Поскольку таблицы, , d2 и d3 все имеют столбцы с тем же именем (cString), вам нужно дать им псевдонимы, чтобы иметь возможность различать то, что есть.

+0

Спасибо, я новичок в этом и ничего не знал об алиасах в SQL, этот запрос является самым сложным запросом, который я когда-либо делал. Работало красиво и гладко –

Смежные вопросы