Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - BindingNavigator + Eingabemaske + DataGrid


mcsnoop - Fr 16.04.10 11:08
Titel: BindingNavigator + Eingabemaske + DataGrid
Hi@All,

Das DataGrid will ich zur Anzeige/Auflistung aller Einträge nutzen.

Mit dem BindingNavigator will ich die Möglichkeit geben Datensätze anzulegen/löschen und im Einzelschritt zu navigieren.

Über die Maske sollen die Werte sowohl anzeigbar als auch editierbar sein.

Hat einer ein Beispiel wie ich da am besten rangehe?

Entsprechende Spalten habe ich im sdf bereits angelegt.

Im BindingNavigator ist standardmäßig ein "+" und ein "x" vorhanden -> Frage:

Wann wird gespeichert? Automatisch wenn ein "neuer" Eintrag eingefügt wird oder ist das voll mir überlassen wann ich die eingegeben Sachen in sdf packe?

Grüße


joshua9 - Fr 16.04.10 16:15

Hallo

es gibt viele Beispiele im Netz. Mit welcher Datenbank arbeitst du,
ist der Zugriff über OleDbConnection oder über SqlConnection

die Bearbeitung, erfolgt diese in einer Tabelle oder in meheren

Gruss Joshua


mcsnoop - Fr 16.04.10 16:25

Hallo Joshua,

MS SQL Compact -> DB File liegt im Programmverzeichnis

Bis jetzt hab ich die Masken alle fertig und die Tabellen angelegt im DB File.

Drauf Zugegriffen habe ich bis jetzt noch nicht, wo muss das rein?

in -> public Form1()..... ?

Zu den Tabellen:

In 2 Tabellen stehen im Grunde nur Einträge drinnen die in Comboboxen reingeladen werden sollen. In Tabellen deshalb weil die Auswahl sich im Laufe vergrößern kann/wird.

In 2 weiteren Tabellen stehen dann Datensätze die Vorher in eine Maske eingegeben worden sind.

So erstmal die graue Theorie.

Grüße


joshua9 - Fr 16.04.10 21:59

Hallo

ich würde zuerst einmal im Netz verschiedenen Beispiele ausprobieren wie zum Beispiel:

http://www.jonasjohn.de/snippets/csharp/sql-connection-example.htm

ich selber habe anhand solcher Beispiele erste Erfahrungen gemacht und habe noch das
Buch Datenbank-Programmierung mit Visual C# 2005 gekauft, hier findest du alle möglichen
Erklärungen dazu.
Anbei sende ich dir ein Beispiel wie eine Connection mit der Datenbank gehen könnte:


C#-Quelltext
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:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;



namespace WindowsApplication1
{
    using System.Data.SqlClient;     

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private string CrLf = Environment.NewLine;
        private SqlConnection conn = null;

        private void showMessage()
        {
            MessageBox.Show("Die Verbindung wurde erfolgreich hergestellt !" + CrLf +
                   "Data Source: " + conn.DataSource + CrLf +
                   "Server Version: " + conn.ServerVersion);
        }


       // mit CSB:
        private void button2_Click(object sender, EventArgs e)
        {
           
            SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
            csb.DataSource = ".\\SQLEXPRESS";
            csb.IntegratedSecurity = true;
            csb.InitialCatalog = "Northwind";
            conn = new SqlConnection(csb.ConnectionString);
            try
            {
                conn.Open();
                showMessage();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }

        // ohne CSB:
        private void button3_Click(object sender, EventArgs e)
        {
            string connStr = "Data Source = .\\SQLEXPRESS; Initial Catalog=Northwind; Integrated Security=true";
            conn = new SqlConnection(connStr);
            try
            {
                conn.Open();
                showMessage();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            string connStr = Properties.Settings.Default.connStr;
            MessageBox.Show(connStr);
            conn = new SqlConnection(connStr);
            try
            {
                conn.Open();
                showMessage();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }

    }
}

ich gebe dir das file noch im Anhang mit
gruss joshua

Moderiert von user profile iconKha: Highlight- durch C#-Tags ersetzt


mcsnoop - Fr 16.04.10 22:35

Hallo Joshua,

allerbesten Dank. Ich werde die Beispiele erst einmal durcharbeiten und bei Fragen mich nochmal hier melden.

Grüße


JüTho - Sa 17.04.10 11:20

@Joshua
Dein Code liest sich mit der Einfärbung grausam. Bitte benutze die Code-Markierung des Forums, das kannst du auch nachträglich erledigen: Öffne deinen Beitrag mit dem Schere-Button, "Bereiche" öffnen, in der ComboBox C# auswählen, Text markieren, Plus-Button, mit "Vorschau" kontrollieren, dann speichern.

Zur Sache: Eine Connection sollte nach Erledigung mit Dispose wieder aufgelöst werden (nicht nur geschlossen). Das kann ich wegen der Einfärbung nicht erkennen. Am einfachsten und sichersten geht das über einen using-Block, siehe [Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen [http://www.mycsharp.de/wbb2/thread.php?threadid=22354] (im Dateianhang oder im allerletzten Beitrag).

user profile iconmcsnoop hat folgendes geschrieben Zum zitierten Posting springen:
Wann wird gespeichert? Automatisch wenn ein "neuer" Eintrag eingefügt wird oder ist das voll mir überlassen wann ich die eingegeben Sachen in sdf packe?

Es ist deine Angelegenheit. Änderungen werden (fast) automatisch in die angehängte DataTable übernommen. Die Übernahme in die DB erfolgt z.B. durch DbDataAdapter.Update, aber erst beim Aufruf durch den Programmierer. Es kann automatisch gesteuert werden; aber in aller Regel ist es benutzerfreundlicher, wenn es durch einen Button-Click ausgelöst wird.

Hinweis: Die Änderungen werden automatisch aus der GUI in die DataTable übernommen, wenn die aktuelle Zeile gewechselt wird. Damit auch die letzten Änderunge der aktuellen Zeile als gültig erkannt werden, ist EndEdit auszuführen.

Gruß Jürgen