c# baza danych i dostęp do textbox z innej klasy

0

Witam, próbuję stworzyć jakis program do zarządzania bazą jednak jestem słaby w te klocki i napotykam problemy.
Czy jest możliwy dostęp do textbox z innej klasy? I czy ten program faktycznie wyświetli mi cokolwiek w textbox1?
Chodzi oczywiście o metode select.
Z góry dzięki.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace baza
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
           
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        

        private void button1_Click_1(object sender, EventArgs e)
        {
            DBConnect konekt = new DBConnect();
            konekt.Select("Select * from tabela1 where id=6"); 

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }
    }
   public class DBConnect
    {
        private MySqlConnection connection;
    private string server;
    private string database;
    private string uid;
    private string password;

    //Constructor
    public DBConnect()
    {
        Initialize();
    }

    //Initialize values
    private void Initialize()
    {
        server = "localhost";
        database = "test";
        uid = "root";
        password = "";
        string connectionString;
        connectionString = "SERVER=" + server + ";" + "DATABASE=" + 
		database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";

        connection = new MySqlConnection(connectionString);
    }

    //open connection to database
    private bool OpenConnection()
    {
        try
        {
            connection.Open();
            return true;
        }
        catch (MySqlException ex)
        {

            switch (ex.Number)
            {
                case 0:
                    MessageBox.Show("Cannot connect to server.  Contact administrator");
                    break;

                case 1045:
                    MessageBox.Show("Invalid username/password, please try again");
                    break;
            }
            return false;
        }
    }
       
    //Close connection
    private bool CloseConnection()
    {
        try
        {
            connection.Close();
            return true;
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message);
            return false;
        }
    }



    //Insert statement
    public void Insert()
    {
        string query = "INSERT INTO tabela1 (imie, nazwisko, kod) VALUES('John','bravo','333')";

        //open connection
        if (this.OpenConnection() == true)
        {
            //create command and assign the query and connection from the constructor
            MySqlCommand cmd = new MySqlCommand(query, connection);

            //Execute command
            cmd.ExecuteNonQuery();

            //close connection
            this.CloseConnection();
        }
    }
  
    public void Delete(string query)
    {
        if (this.OpenConnection() == true)
        {
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.ExecuteNonQuery();
            this.CloseConnection();
        }
    }
    public void Select(string query)
    {
        if (this.OpenConnection() == true)
        {

            MySqlDataAdapter da = new MySqlDataAdapter(query, connection);
            DataTable dt = new DataTable();
            da.Fill(dt);
            if (dt.Rows.Count == 0)
            {
                MessageBox.Show(" nie istnieje");
            }
            else
            {
                textBox1.Text = dt.Rows[0][0] + "";
            }
            this.CloseConnection();
        }
       
    }
    }
  //
}
 
0

Jestem początkujący więc mój sposób może być zły, ale ja bym utworzył dostęp do TextBoxa w innej klasie tak, że bym stworzył w niej obiekt klasy TextBox a nastepnie przesłał bym do niego jako parametr ( w metodzie lub konstruktorze) referencje do oryginalnego TextBoxa.
Wtedy cokolwiek byś robił w klasie, robił byś też na oryginalnym TextBoxie, ponieważ twój obiekt klasy TextBox wskazywał by na oryginalny TextBox.

przykład


class Klasa // do której przesyłasz referencje textboxa
{
 private TextBox tbox;

public void DoWork()
{
 this.tbox.Wykonuj_Działania_na_oryginalnym_textboxie_ktorego_sobie_dodałeś_na_gridzie :P
}

public void Metoda(TextBox parametr)// w metodzie
{
 tbox = parametr;
}

 public Klasa(TextBox parametr) // w konstruktorze
 {
    tbox = parametr;
 }
}

 

Następnie w kodzie głównym programu po prostu podczas tworzenia obiektu w nawiasie dajesz nazwe swojego textboxa :P

Wytłumaczenie: gdy robisz tbox = parametr; tbox nie kopiuje wartosci parametr tylko działa podobnie jak "wskaźnik" i wskazuje na lokacje parametru w pamięci. Dzieje się tak ponieważ obiekty są przechowywane na heap'ie a nie na stacku jak zwykłe zmienne.

Pozostaje też opcja dynamicznego stworzenia TextBoxa a następnie dodanie go do Grid'a :P To taki troche odwrotny sposób od tego co opisałem powyżej.

1
Tukotuko napisał(a):

Czy jest możliwy dostęp do textbox z innej klasy?

Jest możliwy, ale jest Ci całkowicie niepotrzebny. Niech Twoja metoda Select po prostu zwraca string, który sobie wstawisz do TextBoxa np. tak:

 
DBConnect konekt = new DBConnect();
this.textBox1.Text = konekt.Select("Select * from tabela1 where id=6"); 
Vehumet napisał(a):

Jestem początkujący więc mój sposób może być zły, ale ja bym utworzył dostęp do TextBoxa w innej klasie tak, że bym stworzył w niej obiekt klasy TextBox a nastepnie przesłał bym do niego jako parametr ( w metodzie lub konstruktorze) referencje do oryginalnego TextBoxa.

Brzmi trochę jak naprawianie silnika w samochodzie przez rurę wydechową...

0

dzięki!

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