Frage

Ich versuche, Daten in eine Datenbank auf einem Knopfdruck zu speichern, aber die Variablen scheinen durch die Art der privaten zu sein, wo sie definiert sind. Ich habe versucht, zu bewegen, wo sie definiert sind, aber dies scheint zu anderen Fehler zu erzeugen.

Bei einer fix, warum es auf diese Weise festgelegt?

Der Code folgt.

namespace enable
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            OleDbConnection favouriteConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\\\192.168.123.5\\Share\\Matt\\BugTypes.mdb");
            string strSQL = "SELECT CategoryName, Show " + "FROM [Categories] WHERE Show = 'Yes' " + "ORDER BY CategoryName";
            OleDbDataAdapter adapter = new OleDbDataAdapter(strSQL, favouriteConnection);
            OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(adapter);
            DataTable dTable = new DataTable();
            adapter.Fill(dTable);
            BindingSource bSource = new BindingSource();
            bSource.DataSource = dTable;
            dataGridView1.DataSource = bSource;
            adapter.Update(dTable);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            adapter.Update(dTable);//this is the button that needs to do the save, but can't see the variables.
        }
    }
}
War es hilfreich?

Lösung

Sie erklären dTable und adapter im Konstruktor, so geht es aus Rahmen, sobald der Konstruktor abgeschlossen ist.

Sie möchten die Variablendeklarationen bewegen in die Hauptklasse, wie:

public partial class Form1 : Form
{
    private DataTable dTable;
    private OleDbDataAdapter adapter;

    Public Form1()
    {
         ... your setup here ...
         dTable = new DataTable();
         ... etc ...
    }
}

Andere Tipps

namespace enable
{    
    public partial class Form1 : Form
    {

    OleDbDataAdapter adapter;
    DataTable dTable = new DataTable();

        public Form1()
        {
            InitializeComponent();
            OleDbConnection favouriteConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\\\192.168.123.5\\Share\\Matt\\BugTypes.mdb");
            string strSQL = "SELECT CategoryName, Show " + "FROM [Categories] WHERE Show = 'Yes' " + "ORDER BY CategoryName";
            adapter = new OleDbDataAdapter(strSQL, favouriteConnection);
            OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(adapter);
            adapter.Fill(dTable);
            BindingSource bSource = new BindingSource();
            bSource.DataSource = dTable;
            dataGridView1.DataSource = bSource;
            adapter.Update(dTable);            
        }
        private void button1_Click(object sender, EventArgs e)
        {
            adapter.Update(dTable);//this is the button that needs to do the save, but can't see the variables.
        }
    }
}

Sie müssen Dataadapter ändern, und der Datatable Bereich auf die Schaltfläche Click-Methode Ereignis zugänglich sein. Wenn Sie sie auf dem Konstruktor deklarieren können sie nicht auf anderen Methoden acceced werden, müssen Sie sie als Objektfelder erklären, „global“ zu Ihrer Objektinstanz zu sein.

Sie müssen herausfinden, welche Möglichkeiten jede Variable benötigen, können Sie einen lokalen Bereich haben, das heißt, innerhalb einer Methode oder einem Klassenbereich erklärt, außerhalb einer Methode deklariert.

Adapter an den Konstruktor von Form1 scoped ist, nicht auf die Klasse selbst.

Verschieben Adapter und dTabelle private Mitglieder der Klasse sein.

Update: [Seufzer] Ich vergaß dTabelle der Klasse bewältigen als auch ...

zu bewegen
namespace enable
{    
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            OleDbConnection favouriteConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\\\192.168.123.5\\Share\\Matt\\BugTypes.mdb");
            string strSQL = "SELECT CategoryName, Show " + "FROM [Categories] WHERE Show = 'Yes' " + "ORDER BY CategoryName";
            m_Adapter = new OleDbDataAdapter(strSQL, favouriteConnection)l
            OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(m_Adapter);
            dTable = new DataTable();
            m_Adapter.Fill(dTable);
            BindingSource bSource = new BindingSource();
            bSource.DataSource = dTable;
            dataGridView1.DataSource = bSource;
            m_Adapter.Update(dTable);            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            m_Adapter.Update(dTable);//this is the button that needs to do the save, but can't see the variables.
        }

        OleDbDataAdapter m_Adapter;
        DataTable dTable;
    }
}

Adapter und dTabelle wird in Ihrem Konstruktor deklariert. Sie sollen beide werden ‚ausgezogen‘ des Konstruktor Klasse breite Schaufel zu bekommen. So wie Franci mit dem Adapter hat.

Es könnte auch andere Fehler, aber es ist schwer zu erraten, wenn Sie Ihren Compiler-Fehler nicht gebucht haben.

/ johan /

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top