WPF błąd po zaznaczeniu w DataGrid

0

Witam serdecznie

Zaczynam dopiero swoją przygodę z WPF, jednak napotkałem już jeden problem.
Chciałbym żeby po zaznaczeniu danego wersa w DataGrid i wciśnięciu przycisku otwierało się nowe okno, a w nim w odpowiednich textboxach pojawiły się dane z tabeli (ma to umożliwić ich edycję).
Coś na wzór tego: (od 2:30)

Z góry dziękuje za pomoc

0

A ja chciałbym aby na świecie nie było polityków i programistów tworzących gówniany kod. No ale wracając do rzeczywistości. W czym problem?

0

Głównie w tym że nie wiem jak się za to zabrać.

0

Tworzysz swoje okno dialogowe, podpinasz się do zdarzenia OnSelectedRowChanged czy coś w tym stylu i tam otwierasz swoje okno.
A nie sorry ty chcesz po wciśnięciu przycisku to zrobić. Więc podpinasz się do zdarzenie Clicked tam sprawdzasz któy row jest zaznaczony i pokazujesz okno.

0

Musisz wykorzystać SelectedItem i zmapować to na zaznaczony obiekt.

MyObject ob = dgv.SelectedItem as MyObject.

0

Wkleję więc całość :)

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 MySql.Data.MySqlClient;
using System.Data;



namespace Aplikacja_do_zarzadzania
{
    public partial class Glowne_okno : Window
    {
        public Glowne_okno()
        {
            InitializeComponent();
        }
        
        string sql;
        public void pobierzDane(string sql)
        {
            string mojePolaczenie =
            "SERVER=" + "" + ";" +
            "DATABASE=" + "" + ";" +
            "UID=" + "" + ";" +
            "PWD=" + "" + ";";

            MySqlConnection polaczenie = new MySqlConnection(mojePolaczenie);
            
            {
                polaczenie.Open();
                using (MySqlCommand cmdSel = new MySqlCommand(sql, polaczenie))
                {
                    DataTable dt = new DataTable();
                    MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);

                    da.Fill(dt);
                    dataGrid1.ItemsSource = dt.DefaultView;
                }
            }

             polaczenie.Close();

        }

        private void wyczysc_Click(object sender, RoutedEventArgs e)
        {
           textBox_pesel.Text = "";
        }

        private void wyszukaj_Click(object sender, RoutedEventArgs e)
        {
            pobierzDane(sql = "SELECT * FROM dawcy WHERE  id ='" + this.textBox_pesel.Text + "'");
           
        }

        private void odswiez_Click(object sender, RoutedEventArgs e)
        {
            pobierzDane(sql = "SELECT * FROM dawcy;");
        }

      
        private void textBox_pesel_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            
            textBox_pesel.Text = string.Empty;
        }
       
       

        
      
       private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
                object item = dataGrid1.SelectedItem;
                textBox1.Text = (dataGrid1.SelectedCells[0].Column.GetCellContent(item) as TextBlock).Text;
                textBox2.Text = (dataGrid1.SelectedCells[1].Column.GetCellContent(item) as TextBlock).Text;
                textBox3.Text = (dataGrid1.SelectedCells[2].Column.GetCellContent(item) as TextBlock).Text;
            
       }

    }
   
}

Wszystko ładnie ląduje w textboxach, jednak gdy chce po tym odświeżyć bazę, czy na przykład wyszukać kogoś innego program się wykrzacza i wywala błąd "ArgumentNullException wartość nie może być zerowa" wskazujący na textbox1. Podejrzewam że wystarczy dodać odpowiednie if przy wybieraniu row z datagrid. Próbowałem coś w stylu (dataGrid1.Rows.Count > 0), ale w WPF to nie przechodzi.

0
                object item = dataGrid1.SelectedItem;
                if(item == null)
                   return;
                textBox1.Text = (dataGrid1.SelectedCells[0].Column.GetCellContent(item) as TextBlock).Text;
                textBox2.Text = (dataGrid1.SelectedCells[1].Column.GetCellContent(item) as TextBlock).Text;
                textBox3.Text = (dataGrid1.SelectedCells[2].Column.GetCellContent(item) as TextBlock).Text;

To tak strzelam że o to chodzi.
Dowiedz się co to jest debugger i naucz się z tego korzystać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1