Hallo
Ich versuche gerade eine DataGrid in einer SQLite Datenbank zu Speichern, Das auslesen habe ich schon
Hier mal mein Code.
XAML:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBox x:Name="textBox" HorizontalAlignment="Left" Margin="36,35,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="150" Height="37"/>
<Button x:Name="button_AddColumn" Click="button_AddColumn_Click" Content="Button" HorizontalAlignment="Left" Margin="219,39,0,0" VerticalAlignment="Top" Height="33" Width="120"/>
<DataGrid x:Name="myDataGrid" Grid.Row="1" />
</Grid>
xaml.cs zum Testen habe ich jetzt mal kein MVVM gemacht, erst muss ich die Funktion lernen
public partial class MainWindow : Window
{
DataTable myDataTable = new DataTable();
SQLiteConnection myConnection = new SQLiteConnection();
SQLiteCommand myCommand = new SQLiteCommand();
DataSet myDataSet = new DataSet();
public MainWindow()
{
InitializeComponent();
myDataTable.TableName = "test";
myConnection.ConnectionString = @"Data Source = myDataBase.db";
myCommand = myConnection.CreateCommand();
myConnection.Open();
SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from test", myConnection);
adapter.Fill(myDataTable);
myDataGrid.ItemsSource = myDataTable.AsDataView();
myConnection.Close();
}
private void button_AddColumn_Click(object sender, RoutedEventArgs e)
{
myConnection.ConnectionString = @"Data Source = myDataBase.db";
myCommand = myConnection.CreateCommand();
myConnection.Open();
SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from test", myConnection);
//DataSet myDataSet = new DataSet();
adapter.Fill(myDataTable);
myDataTable.AcceptChanges();
myDataTable.Columns.Add(textBox.Text);
myDataGrid.ItemsSource = myDataSet.Tables;
//SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter);
//adapter.UpdateCommand = builder.GetUpdateCommand();
// adapter.TableMappings.Clear();
// adapter.TableMappings.Add(myDataTable);
adapter.Update(myDataTable);
myConnection.Close();
}
}
zu mein Problem ich erstelle mit dem Textbox und Button ein neues Column diese will ich dann in DB Speichern.
Ich könnte es auch auf einem andern weg machen, aber ich möchte versuchen, das er mir das DataGrid 1 zu 1 speichert, es soll auch gespeichert werden wenn in Row was drin steht.
Ich hoffe mir könnte da jemand helfen.
Gruß
Mezzo
Wenn es Dir um das generelle Handling geht (inkl später MVVM): man würde das gar nicht so machen, weil das wahnsinnig ineffizient und langsam ist - und mit größeren Datenmengen auch gar nicht funktioniert.
"Richtig" würde man es machen, dass man Daten über einen DAL lädt (Entitäten via Repositories). Daten werden dann an die UI gebunden und Änderungen führen dazu, dass ein Command den/die Datenbankeinträge über den DAL aktualisiert.
In größeren Anwendungen hätte man dann zusätzlich noch ein State Management, zB via Reactive Extensions.
DataTables und irgendwelcher Adapter verwendet man wenn überhaupt nur noch in Mini-Tools.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code