2017-02-23 7 views
0

私はこれをやってみることを試みてきましたが、これは長い間解決策を見つけることができませんでした。 SQLテーブル/データベースを作成し、ユーザーが作成した入力フィールドにデータを入力し、保存ボタンを押してデータベースに保存します。私は別のタブでデータグリッドをテーブルにバインドしていますが、別のタブで保存ボタンをクリックすると、そのタブに戻ると結果が表示されません。ここで何か間違っているか、コードを書く必要がありますかリフレッシュするには?以下はデータグリッド用のコードです:私のデータグリッドに入力データが表示されないのはなぜですか?

<DataGrid x:Name="employeeDetailsTableDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" Margin="295,160,26,85" RowDetailsVisibilityMode="VisibleWhenSelected" SelectionChanged="employeeDetailsTableDataGrid_SelectionChanged" FontFamily="Arial"> 
        <DataGrid.Columns> 
         <DataGridTextColumn x:Name="employeeIDColumn" Binding="{Binding EmployeeID}" Header="Employee ID" IsReadOnly="True" Width="SizeToHeader"/> 
         <DataGridTextColumn x:Name="forenameColumn" Binding="{Binding Forename}" Header="Forename" Width="SizeToHeader"/> 
         <DataGridTextColumn x:Name="surnameColumn" Binding="{Binding Surname}" Header="Surname" Width="SizeToHeader"/> 
         <DataGridTemplateColumn x:Name="dOBColumn" Header="DOB" Width="SizeToHeader"> 
          <DataGridTemplateColumn.CellTemplate> 
           <DataTemplate> 
            <DatePicker SelectedDate="{Binding DOB, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/> 
           </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 
         </DataGridTemplateColumn> 
         <DataGridTextColumn x:Name="emailAddressColumn" Binding="{Binding EmailAddress}" Header="Email Address" Width="SizeToHeader"/> 
         <DataGridTextColumn x:Name="countryColumn" Binding="{Binding Country}" Header="Country" Width="SizeToHeader"/> 
         <DataGridTextColumn x:Name="addressColumn" Binding="{Binding Address}" Header="Address" Width="SizeToHeader"/> 
         <DataGridTextColumn x:Name="cityColumn" Binding="{Binding City}" Header="City" Width="SizeToHeader"/> 
         <DataGridTextColumn x:Name="postcodeColumn" Binding="{Binding Postcode}" Header="Postcode" Width="SizeToHeader"/> 
         <DataGridTextColumn x:Name="skill1Column" Binding="{Binding Skill1}" Header="Skill 1" Width="SizeToHeader"/> 
         <DataGridTextColumn x:Name="skill2Column" Binding="{Binding Skill2}" Header="Skill 2" Width="SizeToHeader"/> 
         <DataGridTextColumn x:Name="skill3Column" Binding="{Binding Skill3}" Header="Skill 3" Width="SizeToHeader"/> 
         <DataGridCheckBoxColumn x:Name="job1Column" Binding="{Binding Job1}" Header="Job 1" Width="SizeToHeader"/> 
         <DataGridCheckBoxColumn x:Name="job2Column" Binding="{Binding Job2}" Header="Job 2" Width="SizeToHeader"/> 
         <DataGridCheckBoxColumn x:Name="job3Column" Binding="{Binding Job3}" Header="Job 3" Width="SizeToHeader"/> 
         <DataGridCheckBoxColumn x:Name="employeeAvailabilityColumn" Binding="{Binding EmployeeAvailability}" Header="Employee Availability" Width="SizeToHeader"/> 
        </DataGrid.Columns> 
       </DataGrid> 
      </Grid> 

ご協力いただきありがとうございます。

+0

あなたがのViewModelにバインドされていますあなたのグリッドをリフレッシュするだろうか?通常は私の 'ItemsSource'は次のようになります:' ItemsSource = "{Binding CollectionName}" ' –

+0

ああ、私はそれを私のテーブル名に変更しますか? –

+0

以前のバインディングは次のように設定されました:ItemsSource = "{Binding Mode = OneWay}" –

答えて

0

ItemsSource="{Binding}"がプロパティ名に更新されていることを確認する必要があります。ここでバインドされているプロパティでは、PropertyChangedEventHandlerをそのプロパティ名で上げて、xamlが変更が発生したことを通知し、リフレッシュ

今のところあなたのItemsSourceが継承しているオブジェクトにバインドされているようです。ビューモデルにすることができます。バインディングでは、プロパティ名を設定する方法について :ItemsSource="{Binding PropertyName}"

別の可能な解決策は、grid.Items.Refresh();

+0

プロパティはDB内の実際のテーブルですか?もしそうなら、特定の列などにバインドするためだけに全テーブルを入力することはできません。 –

+0

@AaronGいいえ、プロパティはDBの実際のテーブルにはなりません。それはTable.ColumnNameにすることができます。これは、datagridviewのDataContextのプロパティである必要があります。 DataGridViewのdatacontextが変更されたことを聞き、関連付けられているオブジェクトのタイプを確認します。そのオブジェクトからバインドするプロパティを選択します。プロパティのデータ型はDatatableにすることができます。 – Versatile

関連する問題