2016-09-16 43 views
0

我已經將數據從SQL Server表中加載到數據網格中,現在編輯後我希望將更改保存回數據庫。我應該設置綁定模式=「雙向」,更改更新觸發器?使用綁定xsd綁定對象將數據從datagrid保存回SQL Server

這裏是XAML:

<Window x:Class="WpfApplication7.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" 
    xmlns:local="clr-namespace:WpfApplication7" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded" Closing="Window_Closing"> 
<Window.Resources> 
    <local:tempdbDataSet x:Key="tempdbDataSet"/> 
    <CollectionViewSource x:Key="table1ViewSource" Source="{Binding Table1, Source={StaticResource tempdbDataSet}}"/> 
</Window.Resources> 
<Grid DataContext="{StaticResource table1ViewSource}"> 
    <DataGrid x:Name="table1DataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" Margin="104,66,13,53" RowDetailsVisibilityMode="VisibleWhenSelected"> 
     <DataGrid.Columns> 
      <DataGridTextColumn x:Name="iDColumn" Binding="{Binding ID}" Header="ID" IsReadOnly="True" Width="SizeToHeader"/> 
      <DataGridTextColumn x:Name="firstNameColumn" Binding="{Binding FirstName}" Header="First Name" Width="SizeToHeader"/> 
      <DataGridTextColumn x:Name="lastNameColumn" Binding="{Binding LastName}" Header="Last Name" Width="SizeToHeader"/> 
     </DataGrid.Columns> 
    </DataGrid> 

</Grid> 
</Window> 

下面是代碼隱藏文件:

using System.Windows; 

namespace WpfApplication7 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      WpfApplication7.tempdbDataSet tempdbDataSet = ((WpfApplication7.tempdbDataSet)(this.FindResource("tempdbDataSet"))); 
      // Load data into the table Table1. You can modify this code as needed. 
      WpfApplication7.tempdbDataSetTableAdapters.Table1TableAdapter tempdbDataSetTable1TableAdapter = new WpfApplication7.tempdbDataSetTableAdapters.Table1TableAdapter(); 
      tempdbDataSetTable1TableAdapter.Fill(tempdbDataSet.Table1); 
      System.Windows.Data.CollectionViewSource table1ViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("table1ViewSource"))); 
      table1ViewSource.View.MoveCurrentToFirst(); 
     } 
    } 
} 

回答

0

這是一個很好的問題SeveralPens。我看到您必須使用「數據源」窗口中的「拖放」。

該問題與您的XAML設置無關。在數據網格中完成編輯後,數據集將被更新,但是您需要將更改重新推回到數據集的源代碼。請參閱下面的代碼,注意Window_Closing事件更新SQL Server數據庫:

using System.Windows; 


namespace WpfApplication7 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     WpfApplication7.tempdbDataSet tempdbDataSet; 
     WpfApplication7.tempdbDataSetTableAdapters.Table1TableAdapter tempdbDataSetTable1TableAdapter; 
     System.Windows.Data.CollectionViewSource table1ViewSource; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 

      tempdbDataSet = ((WpfApplication7.tempdbDataSet)(this.FindResource("tempdbDataSet"))); 
      // Load data into the table Table1. You can modify this code as needed. 
      tempdbDataSetTable1TableAdapter = new WpfApplication7.tempdbDataSetTableAdapters.Table1TableAdapter(); 
      tempdbDataSetTable1TableAdapter.Fill(tempdbDataSet.Table1); 
      table1ViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("table1ViewSource"))); 
      table1ViewSource.View.MoveCurrentToFirst(); 
     } 

     private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
     { 
      tempdbDataSetTable1TableAdapter.Update(tempdbDataSet.Table1); 
      tempdbDataSet.AcceptChanges(); 

     } 
    } 
}