2016-07-06 12 views
1

Ich verwende LINQ to SQL mit einem Datagrid und binden die Daten an die automatisch generierten Felder. Die Daten werden ordnungsgemäß aktualisiert, wenn Änderungen über LINQ gesendet werden. Das Problem, das ich habe, ist, ich kann nicht scheinen, die aktualisierten Daten zu aktualisieren, nachdem ich eine SQL-Anweisung in der Datenbank direkt ausgeführt habe. Die Datenbankdaten werden korrekt aktualisiert, und die Anwendung wird geschlossen und neu gestartet, damit die Daten korrekt aktualisiert werden.Refresh WPF Datagrid nicht an beobachtbare Sammlung gebunden?

ich versucht habe,

MyTable.Items.Refresh(); 

Und

private DatabaseDataContext sql = new DatabaseDataContext(
      Properties.Settings.Default.StaffConnectionString); 

sql.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues); 

Die XAML verwendet, um die Daten in eine Datagrid Säule zu binden, Info_Data ist die Auto-Feld aus der Datenbanktabelle generiert.

<DataGridTemplateColumn Header="Info" Width="*" SortMemberPath="Words"> 
           <DataGridTemplateColumn.CellTemplate> 
            <DataTemplate> 
             <TextBlock FontWeight="Light" Text="{Binding Path=Info_Data, UpdateSourceTrigger=PropertyChanged}" /> 
            </DataTemplate> 
           </DataGridTemplateColumn.CellTemplate> 

Nach allem scheint es, dass ich brauche eine beobachtbare Sammlung zu erstellen und die Daten an, dass binden und die Sammlung zu aktualisieren, um die Daten-Grid-Tabelle zu aktualisieren. Gibt es einen Weg dazu?

+0

Versuchen: 'CollectionViewSource.GetDefaultView (MyTable.ItemsSource) ?. Refresh(); ' –

+0

Danke @JohanLarsson, das funktioniert auch nicht. Eher frustrierend ist das. – KyloRen

+0

Legen Sie die Objekte einfach in eine ObservableCollection, binden Sie sie in das XAML und machen Sie sich mit Ihrem Leben weiter. Sie erhalten keine Bonuspunkte, um sich selbst zu bestrafen, indem Sie etwas falsch machen. Aber wenn Sie absolut entschlossen sind, Ihre eigene Zeit zu verschwenden, haben Sie versucht, PropertyChanged für die Collection-Eigenschaft zu erhöhen? Oder binden Sie es nicht einmal? –

Antwort

1

Sie könnten SqlDataAdapter und Datatable versuchen, Informationen aus der Datenbank zu laden und binden an Datagrid:

var da = new SqlDataAdapter("SELECT * FROM " + view, conn); 
var dt = new DataTable(); 
da.Fill(dt); 
var dg = new DataGrid();// Your DataGrid 
dg.ItemsSource = dt.DefaultView; 

Auf Update:

dt.Rows.Clear(); 
da.Fill(dt); 
dt.AcceptChanges(); 
Verwandte Themen