【发布时间】:2013-01-05 05:41:23
【问题描述】:
我的问题是.. 我有一个 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));
}
}
现在进入重点:
在拥有此组件的表单中,我运行“初始化”方法。
它显示我不想显示的数据。
然后我在 datagridview 的单元格中更改了一些值。
但是当我点击这个控件的“接受”按钮时,应该 接受更改并更新连接的数据表 到datagridview - 有一个错误说“对象引用不是 设置为对象的实例。”
请帮忙..
【问题讨论】:
-
什么时候调用 Initialize()?这很可能是页面生命周期的问题,在 btnAccept_Click 方法之后调用 Initialize()。
-
在失败的位置下断点,查看变量值。有空值吗?
-
asawyer: FDataTable.AcceptChanges();这个控件是通过将它放在 AdminPanel 中名为“AdminPanel”的表单上创建的,我有一个看起来像这样的构造函数
InitializeComponent(); pwdgvWorkers.Inicialize(FDatabaseManager, FDatabaseManager.FAdmin_WorkersDataTable, FDatabaseManager.FAdmin_WorkersDataAdapter); -
变量为空,但在拥有此控件的管理面板中,变量是可访问的;/
-
FDatabaseManager.FAdmin_WorkersDataAdapter为空。回溯到FDatabaseManager看看为什么。
标签: c# user-controls