将对象传递给用户控件和+对象引用未设置为对象的实例

时间:2013-01-04 18:22:04

标签: c# user-controls

我的问题是..我有一个UserControl,我已经放置了一个DataGridView和一个按钮。 在这个控件上我有三个变量:

namespace MySpace
{
    public partial class PanelWithDataGrid : UserControl
    {
        public DatabaseMenager FDatabaseManager { get; set; }
        public SqlCeDataAdapter FDataAdapter { get; set; }
        private DataTable FDataTable { get; set;  }
        [...]

构造函数如下所示:

public PanelWithDataGrid()
        {
            InitializeComponent();
        }

而且..我的方法看起来像这样:

public void Initialize(DatabaseMenager pDatabaseManager, DataTable pDataTable, SqlCeDataAdapter pDataAdapter)
        {
            FDataAdapter = pDataAdapter;
            FDatabaseManager = pDatabaseManager;
            FDataTable = pDataTable;
        }

而且..我还有一个按钮,其中有一个如下所示的点击事件:

private void btnAccept_Click(object sender, EventArgs e)
        {
            try
            {
                if (MessageBox.Show("Accept changes?", "Accept?", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    FDataTable.AcceptChanges();
                    FDataAdapter.Update(FDataTable);
                }
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(String.Format("Error:\n\n{0}", ex.StackTrace));
            }
        }

现在到了这一点:

  1. 在拥有此组件的表单中,我运行“Initialize”方法。

  2. 显示我要显示的数据。

  3. 然后我在datagridview中的单元格中更改了一些值。

  4. 但是当我点击这个控件的“接受”按钮时应该 接受更改并更新连接的数据表 到datagridview - 有一个错误,上面写着“对象引用不是 设置为对象的实例。“

  5. 请帮助..

1 个答案:

答案 0 :(得分:0)

问题解决了。

此组件 - PanelWithDataGrid - 放置在名为AdminPanel的组件上。

AdminPanel正在执行方法Initialize,该方法将数据适配器和数据表传递给PanelWithDataGrid组件。这些变量为null,因为它们是在Initialize方法之后创建的。

因此,在运行SqlCeDataAdapter方法之前,解决此问题的方法是创建Datatable对象和另一个Initialize对象。