Laden...

SQLiteDataAdapter Update

Letzter Beitrag vor 23 Tagen 2 Posts 214 Views
SQLiteDataAdapter Update

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.