14116
Jan 21, 2015, updated at Feb 09, 2015 (UTC)
1344
2
0
NET C-Sharp: 2x Dataadapter mit unterschiedlichem Select
Hallo,
im Unten angeführetem C# Code, verwende ich eine Form mit zwei DataGridViews an einer AccessDatenbank, angebunden via ODBC.
Das Ganze soll eine MASTER/DETAIL Ansicht sein.
Wenn im DgvPackageSelectionChanged das return auskommentiert wird, so funktioniert das erste Select * from Package wunderbar.
Alle Daten sind im DataGridView ersichtlich.
Läuft nun auch das OnSelect, so vernichtet der 2. Befehl dataAdapter.Fill(ds) die Ansicht des ersten DataGridViews?
Wieso?
Ich verwende doch unterschiedliche Instanzen?
Bitte um Hilfe.
LG
Günter
im Unten angeführetem C# Code, verwende ich eine Form mit zwei DataGridViews an einer AccessDatenbank, angebunden via ODBC.
Das Ganze soll eine MASTER/DETAIL Ansicht sein.
Wenn im DgvPackageSelectionChanged das return auskommentiert wird, so funktioniert das erste Select * from Package wunderbar.
Alle Daten sind im DataGridView ersichtlich.
Läuft nun auch das OnSelect, so vernichtet der 2. Befehl dataAdapter.Fill(ds) die Ansicht des ersten DataGridViews?
Wieso?
Ich verwende doch unterschiedliche Instanzen?
Bitte um Hilfe.
LG
Günter
/*
* Created by SharpDevelop.
*/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Net.Mime;
using System.Windows.Forms;
using System.Data;
using System.Data.Odbc;
using System.Data.Common;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Windows.Forms.VisualStyles;
namespace PinTest
{
/// <summary>
/// Description of MainForm.
/// </summary>
///
public partial class MainForm : Form
{
OdbcConnection connA;
OdbcConnection connB;
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
// Verbindung herstellen
connA = new OdbcConnection();
connA.ConnectionString =
@"Driver={Microsoft Access Driver (*.mdb)};" +
@"Dbq=D:\_src\Database\Database.mdb;Uid=Admin;Pwd=;";
//connA.Open();
connB = new OdbcConnection();
connB.ConnectionString =
@"Driver={Microsoft Access Driver (*.mdb)};" +
@"Dbq=D:\_src\Database\Database.mdb;Uid=Admin;Pwd=;";
//connB.Open();
dgvPackage.MultiSelect=false;
dgvPackage.ReadOnly=true;
dgvPackage.SelectionMode=DataGridViewSelectionMode.FullRowSelect;
dgvMeasurement.MultiSelect=false;
dgvMeasurement.ReadOnly=true;
dgvMeasurement.SelectionMode=DataGridViewSelectionMode.FullRowSelect;
}
void MenuStrip1ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
void QuitToolStripMenuItemClick(object sender, EventArgs e)
{
Application.Exit();
}
void CreateDatabaseToolStripMenuItemClick(object sender, EventArgs e)
{
System.Windows.Forms.FolderBrowserDialog objDialog = new FolderBrowserDialog();
objDialog.Description = "Select Path for Database";
objDialog.SelectedPath=@"."; // Vorgabe Pfad (und danach der gewählte Pfad)
if (objDialog.ShowDialog(this) == DialogResult.OK)
MessageBox.Show("New Path: " + objDialog.SelectedPath);
}
void OpenDatabaseToolStripMenuItemClick(object sender, EventArgs e)
{
try
{
connA.Open();
string sql = @"select * from [Package]";
OdbcDataAdapter dataAdapter = new OdbcDataAdapter(sql, connA);
//OdbcDataReader dataReader = new OdbcDataReader(sql, connA);
DataSet ds = new DataSet();
ds.Clear();
dataAdapter.Fill(ds, "Package");
connA.Close();
dgvPackage.DataSource = "";
dgvPackage.DataSource = ds;
dgvPackage.DataMember = "Package";
dgvPackage.AutoGenerateColumns=true;
dgvPackage.AutoResizeColumns(
DataGridViewAutoSizeColumnsMode.ColumnHeader);
dgvPackage.Show();
}
catch (Exception)
{
}
finally
{
// aufräumen
/*
if (reader != null) reader.Close();
if (conn != null) conn.Close();
*/
}
}
void DataGridView1KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Insert)
{
MessageBox.Show("Insert");
}
}
void DetailToolStripMenuItemClick(object sender, EventArgs e)
{
}
void DgvPackageSelectionChanged(object sender, EventArgs e)
{
//return;
// int rowIndex = dataGridView1.CurrentRow.Index;
// toolStripStatusLabel1.Text = rowIndex.ToString();
string id = dgvPackage.CurrentRow.Cells.Value.ToString();
string sPart = dgvPackage.CurrentRow.Cells[1].Value.ToString();
string sPackage = dgvPackage.CurrentRow.Cells[2].Value.ToString();
//toolStripStatusLabel1.Text = sPart + " | " + sPackage;
// SQL-Kommando abschicken
connB.Open();
string sql = @"SELECT ALL Moment FROM [Moment] WHERE (ID_Name LIKE " + id + ")]";
OdbcDataAdapter dataAdapter = new OdbcDataAdapter(sql, connB);
DataSet ds = new DataSet();
ds.Clear();
dataAdapter.Fill(ds, "Moment");
connB.Close();
dgvMeasurement.DataSource = "";
dgvMeasurement.DataSource = ds;
dgvMeasurement.DataMember = "Moment";
dgvMeasurement.AutoResizeColumns(
DataGridViewAutoSizeColumnsMode.ColumnHeader);
}
void DgvMeasurementSelectionChanged(object sender, EventArgs e)
{
}
}
}
Please also mark the comments that contributed to the solution of the article
Content-Key: 260621
Url: https://administrator.de/contentid/260621
Printed on: April 24, 2024 at 01:04 o'clock
2 Comments
Latest comment
Moin Günter,
deine Datasets sind nur in den Prozeduren vorhanden, sobald die jeweilige Prozedur aber beendet ist, wird auch das Dataset zerstört ( ist ja nur eine lokale Prozedurvariable)...und somit hat das Datagridview keine Datenquelle mehr, ganz einfach
Du musst deine Datasets also außerhalb der Prozeduren deklarieren, damit diese Prozedurübergreifend erhalten bleiben.
Gruß jodel32
deine Datasets sind nur in den Prozeduren vorhanden, sobald die jeweilige Prozedur aber beendet ist, wird auch das Dataset zerstört ( ist ja nur eine lokale Prozedurvariable)...und somit hat das Datagridview keine Datenquelle mehr, ganz einfach
Du musst deine Datasets also außerhalb der Prozeduren deklarieren, damit diese Prozedurübergreifend erhalten bleiben.
Gruß jodel32
Wenns das dann war gelöst nicht vergessen. Danke.