2016-10-20 2 views
0

Я использую C# и XAML для создания диалогового окна, которое отображает информацию из базы данных. Окно, более или менее, функционирует так, как должно. Когда он инициализирован, данные базы данных заполняют DataGrid соответствующим образом.DataGrids и привязки данных

enter image description here

Как вы можете видеть, есть также ComboBox, который предназначен для фильтрации содержимого DataGrid. Это как-то так. Когда я выбираю нужный элемент из ComboBox, он фильтрует мою базу данных и создаетвыбранных типов объектов со всеми их данными. Проблема, с которой я сталкиваюсь, заключается в том, что невозможно определить способ заполнения временной таблицы данными из List<> для заполнения DataGrid. Что конец происходит до это:

enter image description here

Есть правильное количество строк для элементов в базе данных, и когда я запускаю его с перерывом, и все верные сведения в List<>; но данные не отображаются в строках.

Я не могу создать новую таблицу в базе данных для результатов, потому что тогда привязки данных для DataGrid не будут работать; Я попытался заполнить таблицу информацией из List<> с помощью вспомогательных классов ... Не могу понять это.

Любые идеи и/или помощь будут звездными.

Вот примерно столько кода, как я могу отправить: XML Data Bindings (Привязка Путь согласно столбцов в базе данных):

<DataGridTextColumn Header="Size" Binding="{Binding Path=ItemSize }"/> 
<DataGridTextColumn Header="Elbow" Binding="{Binding Path=Ell}"/> 
<DataGridTextColumn Header="Tee" Binding="{Binding Path=Tee}"/> 
<DataGridTextColumn Header="Long-Turn Elbow" Binding="{Binding Path=LngEl}"/> 
<DataGridTextColumn Header="Check Valve" Binding="{Binding Path=Chk}"/> 
<DataGridTextColumn Header="Butterfly Valve" Binding="{Binding Path=Bfy}"/> 
<DataGridTextColumn Header="Gate Valve" Binding="{Binding Path=Gate}"/> 
<DataGridTextColumn Header="Alarm Valve" Binding="{Binding Path=Alm}"/> 
<DataGridTextColumn Header="Dry Pipe Valve" Binding="{Binding Path=DPV}"/> 
<DataGridTextColumn Header="45⁰ Elbow" Binding="{Binding Path=45Ell}"/> 
<DataGridTextColumn Header="Tee Run" Binding="{Binding Path=Teerun}"/> 
<DataGridTextColumn Header="Coupling" Binding="{Binding Path=Coup}"/> 
<DataGridTextColumn Header="Swing Check" Binding="{Binding Path=Swg}"/> 

C#:

var newTable = new CEqlTable(); 

var results = from myRow in vTable.AsEnumerable() 
       where myRow.SubCategoryID == GetPipeNumber() 
       select myRow; 

foreach (DataRow dr in results) 
{ 
    var nextEntry = new CEqlTableRec(
     false, (int)dr[0], (int)dr[1], (double)dr[2], (double)dr[3], 
     (double)dr[4], (double)dr[5], (double)dr[6], (double)dr[7], 
     (double)dr[8], (double)dr[9], (double)dr[10], (double)dr[11], 
     (double)dr[12], (double)dr[13], (double)dr[14], (double)dr[15], 
     Convert.ToByte(dr[18])); 

    newTable.Add(nextEntry); 
} 

dgPipeDetail.ItemsSource = newTable; 
+0

Пожалуйста, разместите полезную часть кода xaml и C#. Без кода трудно сказать, что случилось. –

+0

Эй, Массимилиано, я обновил сообщение с таким количеством кода, сколько смогу. –

+0

newTable - это результаты без фильтрации? Или newTable отфильтрованные результаты? – WBuck

ответ

1

Так что никогда не было достаточно информации для диагностики проблемы, но ниже я опубликовал очень простой пример привязки к коллекции в коде позади. Я также нажал кнопку в главном окне. Когда кнопка нажата, я очищаю предыдущие данные и заполняю datagrid новыми данными. Сравните то, что у меня есть, с тем, что у вас есть. Посмотрите, дает ли он вам какие-либо идеи.

MainWindow.xaml

<Window x:Class="DataGridTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     Title="MainWindow" 
     Height="350" 
     Width="525" 
     DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
<Grid> 
    <DataGrid ItemsSource="{Binding Classes}" 
       CanUserAddRows="False" 
       AutoGenerateColumns="False" 
       Margin="0,0,220,0.5"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="FIRST" Binding="{Binding First}"/> 
      <DataGridTextColumn Header="SECOND" Binding="{Binding Second}"/> 
      <DataGridTextColumn Header="THIRD" Binding="{Binding Third}"/> 
      <DataGridTextColumn Header="FOURTH" Binding="{Binding Fourth}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
    <Button Content="Swap" 
      HorizontalAlignment="Left" 
      Margin="400,70,0,0" 
      VerticalAlignment="Top" 
      Width="75" 
      Command="{Binding SwapCommand}"/> 
</Grid> 

MainWindow.xaml.cs

namespace DataGridTest 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      SwapCommand = new RelayCommand(OnExecuteSwap); 

      InitializeComponent(); 

      for(int i = 0; i < 10; i++) 
      { 
       Classes.Add(
        new MyClass 
        { 
         First = 10, 
         Second = 20, 
         Third = 30, 
         Fourth = 40 
        }); 
      } 
     } 

     private void OnExecuteSwap() 
     { 
      Classes.Clear(); 

      for(int i = 0; i < 10; i++) 
      { 
       Classes.Add(
        new MyClass 
        { 
         First = 50, 
         Second = 60, 
         Third = 70, 
         Fourth = 80 
        }); 
      } 
     } 

     public ICommand SwapCommand { get; } 

     public ObservableCollection<MyClass> Classes { get; } = 
      new ObservableCollection<MyClass>(); 
    } 
} 

МойКласс ПОКО

namespace DataGridTest 
{ 
    public class MyClass 
    { 
     public int First { get; set; } 
     public int Second { get; set; } 
     public int Third { get; set; } 
     public int Fourth { get; set; } 
    } 
} 
+0

Спасибо всем за помощь! Я заработал. –

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