代码不遵循源中的顺序

时间:2015-05-11 13:50:37

标签: c# ms-access combobox oledbconnection

我有一个设置表单,其中有一个组合框,我想填写表单的负载以及从访问数据库返回的数据。

我遇到困难的地方实际上是设置组合框的数据源 - 当程序执行时,它会从填充OleDbDataAdapter跳转到加载表单;跳过代码。

这是我的最新代码:

表单加载

        private void frm_settings_Load(object sender, EventArgs e)
    {
        Divisions divs = new Divisions();
        DataSet ds = new DataSet();


        ds = divs.GetActiveDivisions(); //jumps from here to loading the form
        this.cmbo_divisions.DataSource = ds; //this never gets invoked
    }

和Div​​isions类

    class Divisions
{
    private string error;

    public string Error //read only
    {
        get { return this.error; }
    }

    public DataSet GetActiveDivisions()
    {
        OleDbConnection conn = new OleDbConnection();

        PinnacleConnection Pconn = new PinnacleConnection();
        string sql = "SELECT ID, title FROM Divisions WHERE active = true;";
        DataSet ds = new DataSet();
        //connect to db
        conn = Pconn.createConnection();

        try
        {
            conn.Open();
        }
        catch (Exception ex)
        {
            //error handling here
            this.error = ex.Message;
            return ds;
        }

        OleDbDataAdapter adapter = new OleDbDataAdapter(sql, conn);
        adapter.Fill(ds); //!!jumps from here to loading the form!!
        conn.Close(); //never gets invoked?
        return ds; //never gets invoked?
    }
}

正如您在评论中看到的那样,执行会跳过cmbo_divisions对象上数据源的设置...导致一个空的组合框。

我不知所措,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

我最好的猜测是adapter.Fill抛出异常或包含消息泵。因此,首先测试这些场景。

答案 1 :(得分:0)

您不需要使用数据集,数据表对此更为可靠:

DataTable dt= new DataTable();
...
adapter.Fill(dt); 

并且直接绑定到数据表,因此您可以尽可能避免使用数据集,因为它们是更重的对象:

this.cmbo_divisions.DataSource = dt;