2016-07-21 8 views
1

Ich habe zu dieser komplizierten SQL-Abfrage gegangen, während Sie versuchen, Anwendung für vorhandene Datenbank zu machen, und es an DataGrid überträgt.Komplizierte SQL-Abfrage Datenbindung an 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; 
    } 

in 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 gibt mir resultierende Tabelle mit allen Spalten, die ich brauche, aber in dataAkt colunms organizations.cOrgNamed1.cStringd2.cStringd3.cString coluns sind emply. Kann nicht warum lösen.

Antwort

2

Sie müssen Ihren Spalten aussagekräftige Aliase geben. Sie haben:

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

Ändern Sie diese an:

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

Jetzt können Sie richtig auf die Spalten wie folgt binden:

<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" /> 

Das Problem ist, dass eine Spalte als towns.cTownName ausgewählt wird nicht erhalten Sie den Namen towns.cTownName in der Ergebnismenge, wird es cTownName benannt, ohne das Tabellenpräfix. Da die Tabellen d1, d2 und d3 alle Spalten mit dem gleichen Namen haben (cString), müssen Sie ihnen Aliase geben, um unterscheiden zu können, welche welche ist.

+0

Vielen Dank, ich bin neu in diesem und wusste nichts über Aliase in SQL, diese Abfrage ist die komplizierteste Abfrage, die ich je gemacht habe. Arbeitete nett und glatt –