سؤال

وأنا أحاول لحفظ البيانات إلى قاعدة بيانات على زر، ولكن يبدو أن المتغيرات لتكون خاصة وفقا لطبيعة حيث يتم تعريفها. لقد حاولت أن تتحرك حيث تعريفها، ولكن يبدو أن هذا تنتج أخطاء أخرى.

وبالنظر إلى الإصلاح، لماذا كان على انها ثابتة على هذا النحو؟

ويأتي هذا القانون.

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.
        }
    }
}
هل كانت مفيدة؟

المحلول

أنت تعلن dTable وadapter في منشئ، لذلك يخرج من نطاق بمجرد الانتهاء من البناء.

وأنت تريد نقل تعريفات المتغير للخروج الى الفئة الرئيسية، مثل:

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

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

نصائح أخرى

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.
        }
    }
}

وتحتاج إلى تغيير DataAdapter وونطاق DataTable وليمكن الدخول إلى الحدث انقر على زر الأسلوب. إذا قمت بتعريف لهم على منشئ لا يمكن acceced على طرق أخرى، تحتاج إلى إعلانها كحقول الكائن أن تكون "عالمية" لمثيل كائن الخاص بك.

وتحتاج إلى معرفة ما يحتاجه نطاق كل متغير، هل يمكن أن يكون نطاق محلي، وهذا هو، أعلن داخل وسيلة أو نطاق الطبقة، أعلن خارج الأسلوب.

ووراقب محول إلى منشئ Form1 ومن ليس إلى الفئة نفسها.

ومحول نقل وdtable ليكونوا أعضاء الخاص من فئة.

تحديث: [تنهد] لقد نسيت أن نقل dTable إلى فئة التعامل، فضلا عن ...

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;
    }
}

وأعلن محول وdTable داخل منشئ الخاص بك. وينبغي أن يكون كل من "خرجت" من المنشئ للحصول على الدرجة مغرفة كبيرة. تماما كما فعل فرانسي مع محول.

قد يكون هناك أخطاء أخرى ولكن من الصعب تخمين عندما لم تكن قد سجلت خطأ المترجم الخاص بك.

و/ يوهان /

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top