WPF C# DataGrid Zeilen auslesen

#1
Hallo zusammen.

Ich habe ein DataGrid welches Daten von einem MS SQL Server 2008 R2 bezieht. Das ganze funktioniert so, dass ich nach einem Begriff suche welchen ich durch das SQL Statement:

"Select objectId, shortName from languages where shortName like '" + searchtag + "';"

abfrage. searchtag ist hierbei der Suchbegriff. Nun werden mir die Ergebnisse im DataGrid angezeigt.
Ich möchte nun dass bei einem Doppelklick auf eine Zelle / Zeile sich ein zweites Fenster öffnet welches alle anderen, im DataGrid nicht angezeigten Informationen enthält. Schlussendlich möchte ich in diesem "Detailfenster" die Informationen bearbeiten und mit "Speichern" ein Update Statement absetzten welche die Änderungen in die Datenbank speichert.

Ich habe mir gedacht ich frage irgendwie die aktuelle Zeile / Zelle ab und übergebe der Klasse "Detailfenster" diese Informationen (zb. primärschlüssel). Aufgrund dieser Informationen wird das Detailfenster selbst ein SQL Statement absetzten welches das "Formular" mit Daten füllt.

ist mein Ansatz falsch?

Kurze Zusammenfassung was ich möchte:
1. Suchen nach Begriff in Datenbank - OK
2. Anzeigen der Resultate in DataGrid - OK
3. bei Doppelklick auf eine Zeile Detailfenster öffnen welches alle Informationen zur ausgewählten zeile enthält die man bearbeiten kann und wieder in die Datenbank speichert.

Hier noch mein momentaner Code:
--------------------------------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.SqlClient;
using System.Data;

namespace Prototyp1
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void cmdSearch_Click(object sender, RoutedEventArgs e)
{
string searchtag = txtSearch.Text;
//Datenbank-Bereich-----------------------------------------------
try
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=(local);" + "Initial Catalog=TranslateIT;" + "Integrated Security=true;" + "Connect Timeout=30";
//Öffnen der Datenbankverbindung welche oben beschrieben wurde
con.Open();
//Auszuführender SQL Querry
SqlDataAdapter da = new SqlDataAdapter("Select objectId, shortName from languages where shortName like '" + searchtag + "';", con);
DataTable dt = new DataTable();
da.Fill(dt);
dataSearchResults.ItemsSource = dt.DefaultView;
//Schliessen der Datenbankverbindung
con.Close();
txtbResults.Text = "Suchergebnisse für: " + searchtag;
}
catch(Exception)
{
txtbResults.Text = "Fehler beim Aufbau der Datenbankverbindung";
}
}

private void dataSearchResults_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

}
}
}

--------------------------------------------------------------------------------------------------------------------
Vielen Dank für Lösungsansätze.

PS: Ich bin relativ neu in C# habe aber Erfahrung in C und C++

||Edit:

habe folgenden Code noch test weise eingefügt und es funktioniert. Mal gucken was sich damit machen lässt...
--------------------------------------------------------------------------------------------------------------------
private void dataSearchResults_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
object item = dataSearchResults.SelectedItem;
string ID = (dataSearchResults.SelectedCells[0].Column.GetCellContent(item) as TextBlock).Text;
MessageBox.Show(ID);
}

--------------------------------------------------------------------------------------------------------------------
 
Zuletzt bearbeitet:
#2
Habe nun folgenden Code:
------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.SqlClient;
using System.Data;

namespace TranslateIT_Prototyp
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private SqlDbConnect con;
public MainWindow()
{
InitializeComponent();
}

private void cmdSearch_Click(object sender, RoutedEventArgs e)
{
string search_text = txtSearch.Text;
try
{
con = new SqlDbConnect();
con.SqlQuery("SELECT objectId, translationText, accessKey FROM translations WHERE translationText like '%" + search_text + "%';");
con.Sqlclose();
DataTable dt = con.QueryEx();
dataSearchResults.ItemsSource = dt.DefaultView;
txtbResults.Text = "Suchergebniss für " + search_text;
}
catch(Exception)
{
System.Windows.MessageBox.Show("Beim verbinden mit der Datenbank ist ein Fehler aufgetreten. Versuchen Sie es später nochmals oder wendenen Sie sich an den HelpDesk.");
}
}
private void dataSearchResults_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
object item = dataSearchResults.SelectedItem;
string primaryKey = (dataSearchResults.SelectedCells[0].Column.GetCellContent(item) as TextBlock).Text;
}

private void cmdNew_Click(object sender, RoutedEventArgs e)
{
CreateWindow neuerstellen = new CreateWindow();
neuerstellen.Show();
}
}
}

--------------------------------------
Denke den Rest erarbeite ich selber, erachtet das Thema als erledigt ;-)
 
Oben