DataSet - Neue Datensätze werden über den Tableadapter nicht gespeichert

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    DataSet - Neue Datensätze werden über den Tableadapter nicht gespeichert

    Ich bin gerade dabei eine Gräberverwaltung zu schreiben und hab leider das Problem, dass neue Datensätze über den Dialog scheinbar eingelegt, aber nicht in die Datenbank zurückgeschrieben werden.
    BTW: wir haben es hier mit Schlüsseln zu tun wie, es in dem Beitrag beschrieben ist.
    Hier mal der Code:

    C#-Quellcode

    1. namespace Fried.Frames
    2. {
    3. /// <summary>
    4. /// Eigenes MDI-Form
    5. /// </summary>
    6. public partial class DefaultMDI : Form
    7. {
    8. private string blobkey = "";
    9. /// <summary>
    10. /// Dem Hauptcontainer werden benutzerspezifische Steuerelemente zugewiesen und beim Laden gefüllt
    11. /// </summary>
    12. /// <param name="mdiEnum"></param>
    13. private MDIType mdiEnum;
    14. public TableLayoutPanel Table { get; set; }
    15. public ItemOverview ItemOverview { get; private set; }
    16. public UserControl TreeView { get; private set; }
    17. public UserControl ItemDetail { get; private set; }
    18. public BindingSource Source { get; private set; }
    19. HoefeTableAdapter taHoefe;
    20. DataSet DynamicDataset;
    21. /// <summary>
    22. /// Anhand des ENUM-Wertes wird ermittelt, welches MDI erzeugt werden soll
    23. /// </summary>
    24. /// <param name="mdiEnum"></param>
    25. public DefaultMDI(MDIType mdiEnum)
    26. {
    27. InitializeComponent();
    28. this.mdiEnum = mdiEnum;
    29. Table = tableLayoutPanel1;
    30. DynamicDataset = slData;
    31. switch (mdiEnum)
    32. {
    33. case MDIType.Artikel:
    34. ArtikelTableAdapter taArtikel = new ArtikelTableAdapter();
    35. taArtikel.Fill(slData.Artikel);
    36. break;
    37. case MDIType.Kunden:
    38. KundenTableAdapter taKunde = new KundenTableAdapter();
    39. taKunde.Fill(slData.Kunden);
    40. break;
    41. case MDIType.Verträge:
    42. DataSource.SLDataTableAdapters.VerträgeTableAdapter taVerträge = new DataSource.SLDataTableAdapters.VerträgeTableAdapter();
    43. taVerträge.Fill(slData.Verträge);
    44. break;
    45. case MDIType.Hoefe:
    46. taHoefe = new HoefeTableAdapter();
    47. taHoefe.Fill(slFriedData.Hoefe);
    48. DynamicDataset = slFriedData;
    49. break;
    50. default:
    51. break;
    52. }
    53. Source = new BindingSource(DynamicDataset, mdiEnum.ToString());
    54. txtNummer.DataBindings.Add("Text", Source, "Nummer");
    55. }
    56. /// <summary>
    57. /// In Eigenschaften von dieser Form funktioniert der Double Buffer nicht
    58. /// deshalb wird es manuell eingestellt
    59. /// Durch den Double Buffer werden die Fenster geschmeidiger geöffnet und es beseitig den Flickering
    60. /// </summary>
    61. protected override CreateParams CreateParams
    62. {
    63. get
    64. {
    65. CreateParams handleparam = base.CreateParams;
    66. handleparam.ExStyle |= 0x02000000;
    67. return handleparam;
    68. }
    69. }
    70. /// <summary>
    71. /// Ist ein Suchfeld im MDI-Form
    72. /// </summary>
    73. /// <param name="itemOverview"></param>
    74. public void SetItemOverview(ItemOverview itemOverview)
    75. {
    76. ItemOverview = itemOverview;
    77. Table.Controls.Add(itemOverview, 0, 1);
    78. flowLayoutPanel1.BackColor = Color.White;
    79. }
    80. /// <summary>
    81. /// Erzeugung einer TreeViews im MDI-Form
    82. /// </summary>
    83. /// <param name="treeView"></param>
    84. public void SetTreeView(UserControl treeView)
    85. {
    86. TreeView = treeView;
    87. Control[] controls = ItemOverview.Controls.Find("panelTreeView", true);
    88. if (controls[0] is Panel)
    89. ((Panel)controls[0]).Controls.Add(TreeView);
    90. flowLayoutPanel1.BackColor = Color.Transparent;
    91. }
    92. /// <summary>
    93. /// Genauere Informationen über das ausgewählte Objekt aus dem Suchfeld und aus dem TreeView
    94. /// </summary>
    95. /// <param name="itemDetail"></param>
    96. public void SetItemDetail(UserControl itemDetail)
    97. {
    98. if (itemDetail == null)
    99. return;
    100. if (ItemDetail != null)
    101. Table.Controls.Remove(ItemDetail);
    102. ItemDetail = itemDetail;
    103. Table.Controls.Add(ItemDetail, 1, 1);
    104. }
    105. /// <summary>
    106. /// Setzt das Icon für das MDI Fenster
    107. /// </summary>
    108. /// <param name="icon"></param>
    109. public void SetIcon(Icon icon)
    110. {
    111. Icon = icon;
    112. }
    113. /// <summary>
    114. /// Öffnet den Dialog der Warenwirtschaft
    115. /// </summary>
    116. /// <param name="sender"></param>
    117. /// <param name="e"></param>
    118. private void btnSLOpenData_Click(object sender, EventArgs e)
    119. {
    120. if (StartApplication.fncWawiLogin())
    121. {
    122. string referenz = txtNummer.Text;
    123. BlobkeyObject blobkeyObject = BlobkeyList.GetType(mdiEnum.ToString());
    124. if (referenz == null || referenz == "" || referenz.Length == 0)
    125. {
    126. MessageBox.Show("Der ausgewählte Wert ist ungültig oder exisitert nicht" + "\r" + blobkeyObject.mdi, "Fehler bei Übergabe", MessageBoxButtons.OK, MessageBoxIcon.Error);
    127. }
    128. else
    129. {
    130. StartApplication.oWawi.EditData(blobkeyObject.blobkey, referenz);
    131. }
    132. }
    133. }
    134. #region Blobkey
    135. /// <summary>
    136. /// Der für die COM-Schnittstelle erwartete Blobkey
    137. /// </summary>
    138. /// <param name="Blobkey"></param>
    139. public void SLBlobkey(string Blobkey)
    140. {
    141. if (Blobkey.Length > 1)
    142. {
    143. MessageBox.Show("Der erwartete Wert Blobkey enthält nicht den Wert 1", "Fehler bei Übergabe", MessageBoxButtons.OK, MessageBoxIcon.Error);
    144. }
    145. else
    146. {
    147. blobkey = Blobkey;
    148. }
    149. }
    150. #endregion
    151. private void DefaultMDI_Load(object sender, EventArgs e)
    152. {
    153. bindingNavigator1.BindingSource = Source;
    154. bindingNavigator2.BindingSource = Source;
    155. // wird immer ausgeführt
    156. try
    157. {
    158. toolStripTextBox1.TextBox.DataBindings.Add("Text", Source, "AngelegtAm");
    159. }
    160. catch (Exception)
    161. {
    162. }
    163. }
    164. /// <summary>
    165. /// Speichert die neuen oder geänderten Datensätze
    166. /// </summary>
    167. /// <param name="sender"></param>
    168. /// <param name="e"></param>
    169. private void btnSaveDataSource_Click(object sender, EventArgs e)
    170. {
    171. taHoefe.Update(DynamicDataset);
    172. }
    173. }
    174. }

    Könnte mir dazu jemand bitte einen Tipp zu Lösung geben?
    Dann noch die Frage -> ist es notwendig, dass der DataTableAdapter auf dem Objekt Form platziert wird oder genügt auch die Übergabe per Konstruktor?
    Danke vorab :rolleyes:

    DMO schrieb:

    Ich bin gerade dabei eine Gräberverwaltung zu schreiben und hab leider das Problem, dass neue Datensätze über den Dialog scheinbar eingelegt, aber nicht in die Datenbank zurückgeschrieben werden.


    Da jibbets zwei übliche Verdächtige:
    1. FAQ: Db speichern failt
    2. C#-Quellcode

      1. private void btnSaveDataSource_Click(object sender, EventArgs e) {
      2. bs.Hoefe.EndEdit()
      3. taHoefe.Update(DynamicDataset);
      4. }

    DMO schrieb:

    Dann noch die Frage -> ist es notwendig, dass der DataTableAdapter auf dem Objekt Form platziert wird oder genügt auch die Übergabe per Konstruktor?
    Grundsätzlich natürlich egal.
    Ich halte die generierten TAs aber für Müll und verwende lieber was generisches. Dataset->Db


    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()