[C#] Datagrid zur laufzeit aktualisieren

real-insanity

Erfahrenes Mitglied
Hallo zusammen,

mal wieder ein problem woran ich gerade kläglich scheitere :(.
Ich baue aktuell einen, zugegebenermaßen rudimentären, SQLite TableEditor womit ich elegant die Datensätze pflegen kann ohne ein Drittherstellertool zu benutzen.

Die erste Tabelle (mit Inhalten) wird mir auch richtig angezeigt.
Klicke ich nun auf "go" (sollte die Daten neu laden und in das DataGrid packen), werden die Daten hinzugefügt. Sprich, die alten ColumnHeader sind noch da und es scheint mir, als würde zur Laufzeit (bzw. bei der Aktualisierung durch den Button "go") die Daten nur angehangen werden.

Das ist in sofern problematisch, da ich auch das Hinzufügen/Löschen/Ändern der Datensätze über einen DataAdapter zulasse.

Hier der Code meiner Form:
C#:
using System;
using System.Windows.Forms;
using SoundConductor.Common.Helper;
using System.Data;
using System.Data.SQLite ;

namespace SoundConductor.forms
{
    public partial class frmTableEditor : Form
    {
        DataHelper db = new DataHelper();
        SQLiteDataAdapter daTable = new SQLiteDataAdapter();
        DataSet dsTables = new DataSet();
        DataSet dsTableContent = new DataSet();

        private string tableName = "";
        private bool showID = false;
        private bool showTables = false;

        public bool ShowTables
        {
            get { return showTables; }
            set { showTables = value; }
        }

        public bool ShowID
        {
            get { return showID; }
            set { showID = value; }
        }

        public string TableName
        {
            set { tableName = value; }
        }

        public frmTableEditor()
        {
            InitializeComponent();
        }

        private void frmTableEditor_Load(object sender, EventArgs e)
        {
            try
            {
                if (showTables == false)
                {
                    dgvTableContent.Dock = DockStyle.Fill;
                    this.Text = string.Format(this.Text, tableName);

                    daTable = db.GetTable(this.tableName);
                    daTable.Fill(dsTables);

                    //set the DataGridView DataSource
                    dgvTableContent.DataSource = dsTables.Tables[0];
                    dgvTableContent.Columns["ID"].Visible = this.showID;
                }
                else
                {
                    dgvTableContent.Dock = DockStyle.None;
                    DataSet Tables = db.GetTables();
                    if (Tables.Tables.Count > 0)
                    {
                        cboTables.DataSource = Tables.Tables[0];
                        cboTables.DisplayMember = "name";
                        cboTables.Refresh();
                    }
                }

                lblTables.Visible = showTables;
                cboTables.Visible = showTables;
                btnGo.Visible = showTables;
                
                
            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message);
            }
        }

        private void btnSaveData_Click(object sender, EventArgs e)
        {

        }
      
        private void dgvTableContent_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                daTable.Update(dsTableContent);
                dgvTableContent.EndEdit();
            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message);
            }
        }

        private void btnDeleteRow_Click(object sender, EventArgs e)
        {
            try
            {
                dgvTableContent.Rows.RemoveAt(dgvTableContent.SelectedRows[0].Index);
                daTable.Update(dsTableContent);
            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message.ToString());
            }
        }

        private void btnGo_Click(object sender, EventArgs e)
        {
            
            try
            {
                this.Text = string.Format(this.Text, cboTables.Text);

                dsTableContent.Clear();
                daTable = db.GetTable(cboTables.Text);
                daTable.Fill(dsTableContent);

                dgvTableContent.DataSource = dsTableContent.Tables[0];
                dgvTableContent.Columns["ID"].Visible = this.showID;
                dgvTableContent.Refresh();
                dgvTableContent.Update();

            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message.ToString());
            }
        }
    }
}

Die Methode "GetTable" sieht so aus:
C#:
public SQLiteDataAdapter GetTable(string _tablename, bool AllFields = true)
        {
            return DataBaseHelper.GetDataAdapter(string.Format("SELECT * FROM {0} ORDER BY ID", _tablename));
        }

Ich finde zum Verrecken keinen Fehler in meiner Überlegung.
Hatte schon versucht das Dataset über Clear() zu Leeren, auch die Rows und Columns habe ich mit Clear(), vergeblich, versucht zu löschen.

Habt Ihr eine Idee was ich noch machen kann?
Edit:
Die Tabellen hole ich mir über deine DropDown, das mit Daten der Tabellen gefüllt wird und dann entsprechend eine Tabelle zur Anzeige auswählen kann.
 
Ich bin mir nicht sicher da ich auch ein Anfänger in ASP.NET bin,
aber könnte es sein das eine dgvTableContent.DataBind() fehlt?
 
Zurück