如何从该表单中的usercontrol访问在我的主窗体中实例化的公共类?

时间:2014-03-06 15:27:20

标签: c# mysql forms inheritance user-controls

当我尝试访问嵌入在MainForm中创建的类中的函数时,我遇到了从Usercontrol抛出nullpointerexception的问题。

它的外观如下:

public MySqlPlannerFunctions sqlPlanner;

public Form1()
    {
        InitializeComponent();

        #region "conString"
        MySqlMain sqlMain = new MySqlMain("root", "*******", 
                                          "opcnewest", "localhost", "3306");
        #endregion
        sqlPlanner = new MySqlPlannerFunctions(sqlMain);
    }

使用MySqlMain的构造函数,我只需填写我的connectionstring的数据。然后我创建sqlPlanner的实例,并在该构造函数中我抛出我的MySqlMain类,以便我可以直接从sqlPlanner类访问它。希望这是有道理的。

    MySqlMain sqlMain;

    public MySqlPlannerFunctions(MySqlMain SqlMain)
    {
        this.sqlMain = SqlMain;
    }

然后在我的Usercontrol中,它将使用sqlPlanner,它看起来就像这样。

    Form1 myParent;

    public PlanningControl()
    {
        InitializeComponent();
        myParent = (Form1)this.ParentForm;

    } 

    private void PlanningControl_Load(object sender, EventArgs e)
    {
        dtp_selectedDTFrom = planner_dtp_FromDate.Value.Date;
        dtp_selectedDTTo = planner_dtp_ToDate.Value.Date;

        try
        {
            dS = new DataSet();
            dS = myParent.sqlPlanner.GetPlanInInterval(dtp_selectedDTFrom,                   dtp_selectedDTTo);
        }
        catch (MySqlException ex)
        { 
            MessageBox.Show(ex.Message);
        }
        FillListView(dS, planner_lv_Plan);

    }

当我尝试调用函数myParent.sqlPlanner.GetPlanInInterval(data,data)时发生我的nullpointerexepction;

我一直在互联网上搜索几个小时,无法找到任何解决方案。所以我真的希望这里有人可以帮助我和其他可能遇到同样问题的人。

我这样做的方式是错误的,我处理SQL类的方式只是完全延迟,或者你能想出的任何东西都可以让我成为更好的开发者。

修改

我被问到GetPlanInInterval函数内部是什么,这就是它:

    public DataSet GetPlanInInterval(DateTime from, DateTime to)
    {
        DataSet dS;
        string sqlQuery = "SELECT * FROM " + prod_planning + " WHERE date >= @from AND =< @to";
        MySqlCommand cmd = sqlMain.CreateCommand(sqlQuery);
        if (cmd != null)
        {
            cmd.Parameters.AddWithValue("@from", from.Date.ToString("yyyy-MM-dd"));
            cmd.Parameters.AddWithValue("@to", to.Date.ToString("yyyy-MM-dd"));

            dS = new DataSet();
            dS = sqlMain.Select(prod_planning, cmd);

            if (dS != null) return dS;                
        }
        return null;             
    }

在sqlMain.Select()中它看起来像这样:

    public DataSet Select(string table, MySqlCommand sqlCommand)
    {
        DataSet dS;

        if (this.OpenConnection() == true)
        {
            sqlDataAdapter = new MySqlDataAdapter();
            sqlDataAdapter.SelectCommand = sqlCommand;

            dS = new DataSet();
            sqlDataAdapter.Fill(dS, table);

            sqlDataAdapter.Dispose();
            sqlCommand.Dispose();

            this.CloseConnection();

            return dS;
        }
        else
        {
            return null;
        }
    }

0 个答案:

没有答案