2

私の問題は..私はUserControlを持っていて、その上にDataGridViewとボタンを配置しました。このコントロールには、次の3つの変数があります。

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に接続されているデータテーブルを更新する必要があるこのコントロールの[同意する]ボタンをクリックすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。

助けてください..

4

1 に答える 1

0

問題が解決しました。

このコンポーネント--PanelWithDataGridは、と呼ばれるコンポーネントに配置されましたAdminPanel

は、データアダプタとデータテーブルをPanelWithDataGridコンポーネントに渡すAdminPanelメソッドを実行して いました。これらの変数は、メソッドInitializeの後に作成されたため、nullでした。Initialize

したがって、この問題の解決策は、メソッドを実行する前にあるオブジェクトSqlCeDataAdapterと別のオブジェクトを作成することです。DatatableInitialize

于 2013-01-04T21:41:23.957 に答える