Здравствуйте, есть проблема, не могу понять, в чем она, пожалуйста, помогите. Извиняюсь, если такая тема уже была на форуме, но я ее не нашел(
Есть DataGrid, в который выводится таблица из DataSet, которая, в свою очередь - результат SELECT'а из БД Oracle. Проблема в том, что выводятся не все данные из столбцов, а точнее, столбцы генерируются, и только в последнем, который не просто столбец, а результат деления значений одного столбца на значения другого, данные не выводятся на DataGrid. При этом в DataSet они попадают, их можно получить оттуда (что я и сделал с помощью TextBlock'ов на форме). Как быть?
Под спойлером коды.
Запрос SQL:
1.
SELECT VEDOMOST_OBIEMOV_RAB.NAME_RAB, NORMI_RABOT.NORM_PERSON, NORMI_RABOT.NORM_MECH, VEDOMOST_OBIEMOV_RAB.VOLUME_RAB/NORMI_RABOT.NORM_PERSON FROM VEDOMOST_OBIEMOV_RAB, NORMI_RABOT WHERE VEDOMOST_OBIEMOV_RAB.NAME_RAB=NORMI_RABOT.NAME_RAB
Разметка формы:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
<Window x:Class="StroyRegistr.Forms.MakeKARTA_OPR_RABWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MakeKARTA_OPR_RABWindow" Height="500" Width="800">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\Styles\Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="5"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="5"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="180"/>
</Grid.ColumnDefinitions>
<DataGrid Grid.Row="0" Grid.RowSpan="7" Style="{StaticResource DataGridStyle}" Name="DG_Ved" ItemsSource="{Binding}" AutoGenerateColumns="True" SelectionChanged="DG_Ved_SelectionChanged">
</DataGrid>
<Button Grid.Row="1" Grid.Column="3" Grid.ColumnSpan="2" Name="BtnMakeKARTA" Content="Построить" Width="Auto" HorizontalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="2" Name="TxtRab" Background="Aqua" Text="Работа"/>
<TextBlock Grid.Row="3" Grid.Column="2" Name="TxtPerson" Background="Aqua" Text="Норм. ч"/>
<TextBlock Grid.Row="4" Grid.Column="2" Name="TxtMech" Background="Aqua" Text="Норм. маш"/>
<TextBlock Grid.Row="5" Grid.Column="2" Name="TxtResult" Background="Aqua" Text="Результат"/>
<TextBlock Grid.Row="2" Grid.Column="3" Name="TxtRabV" Background="Aqua" TextWrapping="Wrap"/>
<TextBlock Grid.Row="3" Grid.Column="3" Name="TxtPersonV" Background="Aqua"/>
<TextBlock Grid.Row="4" Grid.Column="3" Name="TxtMechV" Background="Aqua"/>
<TextBlock Grid.Row="5" Grid.Column="3" Name="TxtResultV" Background="Aqua" TextWrapping="Wrap"/>
</Grid>
</Window>
Стиль "DataGridStyle"
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<Style TargetType="{x:Type DataGrid}" x:Key="DataGridStyle">
<Setter Property="AutoGenerateColumns" Value="False"/>
<Setter Property="Background" Value="#E5F1E4"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="HeadersVisibility" Value="Column"/>
<Setter Property="AlternationCount" Value="2"/>
<Setter Property="GridLinesVisibility" Value="Vertical"/>
<Setter Property="SelectionMode" Value="Extended"/>
<Setter Property="VerticalGridLinesBrush" Value="#C6D7C5"/>
<Setter Property="SelectionUnit" Value="FullRow"/>
</Style>
Код метода SelectToBD:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static DataTable SelectFromDB(string tableName, string query)
{
if (StroyDataSet.Tables.Contains(tableName))
StroyDataSet.Tables[tableName].Clear();
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(query, connectionString);
myDataAdapter.Fill(StroyDataSet, tableName);
return StroyDataSet.Tables[tableName];
}
Код вывода данных через DataGrid на форме:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public MakeKARTA_OPR_RABWindow()
{
InitializeComponent();
SelectFromBD();
}
private void SelectFromBD()
{
query = "SELECT VEDOMOST_OBIEMOV_RAB.NAME_RAB, NORMI_RABOT.NORM_PERSON, NORMI_RABOT.NORM_MECH, VEDOMOST_OBIEMOV_RAB.VOLUME_RAB/NORMI_RABOT.NORM_PERSON FROM VEDOMOST_OBIEMOV_RAB, NORMI_RABOT WHERE VEDOMOST_OBIEMOV_RAB.NAME_RAB=NORMI_RABOT.NAME_RAB";
DG_Ved.DataContext = WorkTableClass.SelectFromDB(tableName, query);
}
private void DG_Ved_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (DG_Ved.SelectedIndex != -1)
{
TxtRabV.Text = WorkTableClass.StroyDataSet.Tables[tableName].DefaultView[DG_Ved.SelectedIndex][0].ToString();
TxtPersonV.Text = WorkTableClass.StroyDataSet.Tables[tableName].DefaultView[DG_Ved.SelectedIndex][1].ToString();
TxtMechV.Text = WorkTableClass.StroyDataSet.Tables[tableName].DefaultView[DG_Ved.SelectedIndex][2].ToString();
TxtResultV.Text = WorkTableClass.StroyDataSet.Tables[tableName].DefaultView[DG_Ved.SelectedIndex][3].ToString();
}
}
В Apex'е тот же запрос выводит всё нормально
Ну и в приложении скриншот из формы, где видно, в чем проблема.