2016-10-20 6 views
0

私はC#とXAMLを使用して、データベースの情報を表示するダイアログボックスを作成しています。ウィンドウは多かれ少なかれ、機能するように機能します。初期化されると、データベースデータにはDataGridが適切に設定されます。DataGridsとデータバインディング

enter image description here

あなたが見ることができるように、ComboBoxDataGridの内容をフィルタリングすることを意図しているにもあります。それはこれでやります。 ComboBoxから目的のアイテムを選択すると、自分のデータベースがフィルタリングされ、選択したオブジェクトタイプのデータがすべてList<>になります。私が抱えている問題は、DataGridを埋めるためにList<>のデータを一時テーブルに書き込む方法を見つけることができないということです。どのような最後のアップが起こってことはこれです:

enter image description here

あり、データベース内の要素の行の正しい数である、と私は休憩でそれを実行すると、すべての正しいデータがList<>です。データは行に表示されていません。

DataGridのデータバインディングが機能しないため、結果としてデータベースに新しいテーブルを作成できません。私はList<>からヘルパークラスを介してテーブルを再移植しようとしました...これを理解することはできません。

すべてのアイデアや助けが恒星になるでしょう。ここで

私が投稿できるように、コードのおよそ同じくらいです。 XMLデータバインディング(バインディングのパスは、データベース内の列に従ったものである):

<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

問題を診断するのに十分な情報が得られたことはありませんでしたが、私はコードの背後にあるコレクションにバインディングするという非常に単純な例を投稿しました。私はまた、メインウィンドウにボタンを置く。ボタンをクリックすると、前のデータをクリアし、新しいデータでデータグリッドを埋めます。あなたが持っているものと私が下にあるものを比較してください。それがあなたにアイデアを与えるかどうかを見てください。

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>(); 
    } 
} 

MyClassのPOCO

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

皆さん、ありがとうございました!私はそれを働かせた。 –

関連する問題