ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
1121
1121
EMPFEHLEN
-
08.11.11 22:04 #1
- Registriert seit
- Mar 2007
- Ort
- Viersen, Germany
- Beiträge
- 102
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:
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
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:
Code csharp:1 2 3 4
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?
-
10.11.11 08:53 #3
- Registriert seit
- Mar 2007
- Ort
- Viersen, Germany
- Beiträge
- 102
Also in WinForms scheints das nicht zu geben. Weil der binded die Daten ja schon dran, sobald man die Datasource zuweist.
Ähnliche Themen
-
Resourcebundle - Sprache zur Laufzeit aktualisieren?
Von flashray im Forum JavaAntworten: 13Letzter Beitrag: 25.02.11, 19:04 -
JFrame.setTitle() zur Laufzeit ständig aktualisieren
Von Lautsprecher im Forum JavaAntworten: 5Letzter Beitrag: 10.08.07, 15:59 -
JTable zur Laufzeit aktualisieren
Von cHucKy51 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 6Letzter Beitrag: 03.08.07, 15:59 -
Datagrid aktualisieren & bearbeiten
Von royalboy im Forum .NET ArchivAntworten: 3Letzter Beitrag: 20.05.04, 21:01 -
Datagrid aktualisieren
Von Javaprogrammer im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 12.04.04, 21:58





Zitieren
Login





