我有一个简单的c#winform,它使用报告查看器来显示报告。 。我的表格如下 `
private void member_Search_Load(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
if (key1 == "index")
{
try
{
this.report_membersTableAdapter.Fill(this.DataSet2.report_members, key1, "", value1, DateTime.Now, DateTime.Now);
this.reportViewer1.RefreshReport();
}
catch (Exception ex) {
MessageBox.Show("mbr_srh::ind" + ex.Message);
}
}
if (key1 == "name")
{
try
{
this.report_membersTableAdapter.Fill(this.DataSet2.report_members, key1, value1, "", DateTime.Now, DateTime.Now);
this.reportViewer1.RefreshReport();
}
catch (Exception ex) {
MessageBox.Show("mbr_srh::nam"+ex.Message);
}
}
if (key1 == "library")
{
try
{
this.report_membersTableAdapter.Fill(this.DataSet2.report_members, key1, "", "", d11, d22);
this.reportViewer1.RefreshReport();
}
catch (Exception ex) {
MessageBox.Show("mbr_srh::lib" + ex.Message);
}
}
if (key1 == "school")
{
try
{
this.report_membersTableAdapter.Fill(this.DataSet2.report_members, key1, "", "", d11, d22);
this.reportViewer1.RefreshReport();
}
catch (Exception ex) {
MessageBox.Show("mbr_srh::sch" + ex.Message);
}
}
}
public void set(string key, string value)
{
key1 = key;
value1 = value;
this.Show();
}
public void Setdate(string key, DateTime d1, DateTime d2)
{
key1 = key;
d11 = d1;
d22 = d2;
this.Show();
}
private void reportViewer1_Load(object sender, EventArgs e)
{
}
}
}`
我可以第一时间调用set()
或setdate()
函数,但是当我第二次调用上面的函数时,它给了我一个异常cannot access a disposed object exception:object name:member_search
并突出显示this.Show()
在set()
或setdate()
函数中,有人可以为此解决这个问题吗?
答案 0 :(得分:0)
如果您关闭表单,它将被处理掉。
据我所知,您可以从主表单打开报表。然后查看报告并关闭报告表单。即使您在主表单中保存报表表单的变量,当您通过单击十字形关闭它时,报表也会被处理掉。因此,您必须先创建一个新的报表,然后再下一次显示它。
如果你想避免这种情况,你必须使用member_SearchForm.Hide()。