Autor Beitrag
holsen
Hält's aus hier
Beiträge: 2

XP RRO / Vista
C# , C++
BeitragVerfasst: Di 30.10.07 10:31 
Guten Morgen

Folgende Frage?
Habe eine Datenbank Akten.mdb mit zurzeit zwei Tabellen.
Auf der Form, ein Start Button, zwei radiobutton, eine Textbox sowie ein DataGridView1.
Folgende Funktion sollte ausgelöst werden.
Beim start soll die Tabelle mit akte1 gefüllt werden, und beim ändern von den Radiobutton1
auf den Radiobutton2 soll die Tabelle mit akte2 gefüllt werden.

Leider kommt immer der Fehler

"Dies führt dazu, dass sich zwei Bindungen der Auflistung an dieselbe Eigenschaft binden.
Parametername: binding"


was muss ich ändern?
ausblenden volle Höhe 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:
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private OleDbDataAdapter da;
        private OleDbDataAdapter daa;
        private DataTable dt;
        private DataTable dtt;
        private BindingSource bs = new BindingSource();
        private BindingSource bss = new BindingSource();

        public void Form1_Load(object sender,EventArgs e)
        {
            Start(sender, e);
        }
        public void Start(object sender, EventArgs e)
        {
            string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Akten.mdb;";
            OleDbConnection conn = new OleDbConnection(connStr);

            if (radioButton1.Checked == true)
            {
                string ab = "Akte1";
                    
                    string selStr = "SELECT LaufNr,Reihe,stock1,stock2,stock3,stock4 FROM Akte1";
                    OleDbCommand cmd = new OleDbCommand("SELECT *FROM Akte1", conn);
                    da = new OleDbDataAdapter(selStr, conn);
                    OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
                    da.SelectCommand = new OleDbCommand(selStr, conn);
                    dt = new DataTable(ab);
                    conn.Open();
                    da.Fill(dt);
                    conn.Close();
                    bs.DataSource = dt;
                    textBox20.DataBindings.Add("Text", bindingSource1, "Reihe");
                    bindingSource1.DataSource = dt;
                    dataGridView1.DataSource = dt;
            }
            if (radioButton2.Checked == true)
            {
                string ab = "Akte2";

                    string selStr = "SELECT LaufNr,Reihe,stock1,stock2,stock3,stock4 FROM Akte2";
                    OleDbCommand cmd = new OleDbCommand("SELECT *FROM Akte2", conn);
                    daa = new OleDbDataAdapter(selStr, conn);
                    OleDbCommandBuilder cb = new OleDbCommandBuilder(daa);
                    daa.SelectCommand = new OleDbCommand(selStr, conn);
                    dtt = new DataTable(ab);
                    conn.Open();
                    daa.Fill(dtt);
                    conn.Close();
                    bss.DataSource = dtt;
                    textBox20.DataBindings.Add("Text", bindingSource2, "Reihe");
                    bindingSource2.DataSource = dtt;
                    dataGridView1.DataSource = dtt;
            }
        }



Moderiert von user profile iconjasocul: Topic aus C# - Die Sprache verschoben am Di 30.10.2007 um 09:33
Einloggen, um Attachments anzusehen!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 30.10.07 12:01 
Du erzeugst ein OleDbCommand, das du nie benutzt, dann einen Adapter mit selectCommandText. Dann einen CommandBuilder, den du nie benutzt, dann überschreibst du das SelecCommand des Adapters mit genau der gleichen SQL-Query. Interessante Konstruktion :shock: .

Mach es dir doch nicht so schwer: Eine DataTable "table" und einen OleDbDataAdapter "adapter" als Feld deiner Form-Klasse. Im Konstruktor nach InitializeComponent:
ausblenden C#-Quelltext
1:
2:
3:
4:
table = new DataTable();
adapter = new OleDbDataAdapter();
adapter.Connection = new OleDbConnection("...");
textBox20.DataBindings.Add("Text""Reihe");

Und beim Checkbox-Wechsel füllst du einfach die Table neu:
ausblenden C#-Quelltext
1:
2:
3:
4:
string source = radioButton1.Checked ? "Akte1" : "Akte2"// riecht nach nicht ganz sauberem DB-Aufbau ;)
adapter.SelectCommand = new OleDbCommand("select * from " + source, connection);
table.Clear();
adapter.Fill(table);

Oder irgendwie so ähnlich *g* .