winfrom报表FastReport第二次加载报错跟踪不到

起个昵称真费劲 2012-11-29 03:31:35
哪位大神帮忙看看
/// <summary>
/// 资产领用报表
/// </summary>
/// <param name="applyId">领用单Id</param>
public void ViewReport(string applyId)
{
try
{
report = null;
datatable = null;
dataviewAsset = null;

// Create report object
report = new TfrxReportClass();
report.SetGlobalVariable("Language", "Chinese");

#region 查询领用单报表数据
ApplyBLL applyBll = new ApplyBLL();
DataSet ds = null;
DataTable dtB2 = null;
DataTable dtR2 = null;
DataTable dtAsset = null;

if (!string.IsNullOrEmpty(applyId))
{
ds = applyBll.GetApplyReport(applyId);
dtB2 = ds.Tables["apply"];
dtR2 = ds.Tables["applyRel"];
dtAsset = ds.Tables["asset"];
}
#endregion
datatable = new FrxDataTable(dtB2);
datatable.Dispose();
datatable.AcceptChanges();
// These events used for Master/Detail implementation
datatable.FrxEventOnFirst += new FrxOnFirst(datatable_FrxEventHandler);
datatable.FrxEventOnNext += new FrxOnNext(datatable_FrxEventHandler);
datatable.FrxEventOnPrior += new FrxOnPrior(datatable_FrxEventHandler);

// Create the FR compatible DataView object
dataviewAsset = new FrxDataView(dtAsset, "DataViewAsset");

// We need following to make ongoing the report windows modal
report.MainWindowHandle = (int)this.Handle;

// Load demmonstration report from file
string reportPath = Smt.Utils.Common.SysRootPath() + "report\\资产领用报表.fr3";
report.LoadReportFromFile(reportPath);

report.ClearDatasets();
// Asiign datasets to report one more time
// beacuse theLoadReport... family functions breaks links between report and dataset
datatable.AssignToReport(true, report);
dataviewAsset.AssignToReport(true, report);
// Assigns DataTable to MasterBand
datatable.AssignToDataBand("MasterData1", report);
// Assigns DataView to DetailBand
dataviewAsset.AssignToDataBand("DetailData1", report);
report.ShowReport();//fastreport自带的预览窗体界面
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}

FrxDataTable.cs在楼下。报的错是
...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
应该是事件注册了没释放的意思,可是不知道在哪释放啊
  • 打赏
  • 举报
回复
顶啊~!大神归为
  • 打赏
  • 举报
回复
using System; using System.Data; using System.ComponentModel; using FastReport; namespace Smt.EamCS.WinForm { public delegate void FrxOnFirst(); public delegate void FrxOnNext(); public delegate void FrxOnPrior(); /// <summary> /// Summary description for FrxDataSet. /// </summary> public class FrxDataTable : DataTable { private int nItem; TfrxUserDataSetClass m_ds; private DataTable m_ChildTable; public int _nItem { get { return nItem; } set { nItem = value; } } public new string TableName { get { return m_ds.Name; } } public IfrxDataSet FrxTable { get { return m_ds as IfrxDataSet; } } public event FrxOnFirst FrxEventOnFirst; public event FrxOnNext FrxEventOnNext; public event FrxOnPrior FrxEventOnPrior; private void constructor(string name) { try { m_ChildTable = null; m_ds = new TfrxUserDataSetClass(); m_ds.Name = name; m_ds.OnCheckEOF += new IfrxUserDataSetEventDispatcher_OnCheckEOFEventHandler(OnCheckEOFEventHandler); m_ds.OnGetValue += new IfrxUserDataSetEventDispatcher_OnGetValueEventHandler(OnGetValueHandler); m_ds.OnFirst += new IfrxUserDataSetEventDispatcher_OnFirstEventHandler(OnFirstEventHandler); m_ds.OnNext += new IfrxUserDataSetEventDispatcher_OnNextEventHandler(OnNextEventHandler); m_ds.OnPrior += new IfrxUserDataSetEventDispatcher_OnPriorEventHandler(OnPriorEventHandler); DataColumnCollection cols = Columns; cols.CollectionChanged += new CollectionChangeEventHandler(ColumnsCollection_Changed); } catch (Exception ex) { throw ex; } } public FrxDataTable(string name) { constructor(name); } public FrxDataTable(DataTable t) { try { constructor(t.TableName); string FieldNames = null; foreach (DataColumn col in t.Columns) FieldNames += col.Caption + "\n"; m_ds.Fields = FieldNames; m_ChildTable = t; } catch (Exception ex) { throw ex; } } /// <summary> /// Assigns table to report /// </summary> public void AssignToDataBand(string BandName, TfrxReportClass report) { try { IfrxComponent frx_component; frx_component = ((IfrxComponent)report).FindObject(BandName); ((IfrxDataBand)frx_component).DataSet = (IfrxDataSet)m_ds; } catch (Exception ex) { throw ex; } } /// <summary> /// Assigns table to report /// </summary> public void AssignToReport(bool Enable, TfrxReportClass report) { try { report.SelectDataset(Enable, m_ds as IfrxDataSet); } catch (Exception ex) { throw ex; } } /// <summary> /// On First event handler /// </summary> private void OnFirstEventHandler() { try { bool eof; nItem = 0; OnCheckEOFEventHandler(out eof); if (!eof && FrxEventOnFirst != null) FrxEventOnFirst(); } catch (Exception ex) { throw ex; } } /// <summary> /// On Next event handler /// </summary> private void OnNextEventHandler() { try { bool eof; nItem++; OnCheckEOFEventHandler(out eof); if (!eof && FrxEventOnNext != null) FrxEventOnNext(); } catch (Exception ex) { throw ex; } } /// <summary> /// On Prior evene handler /// </summary> private void OnPriorEventHandler() { try { bool eof; nItem--; OnCheckEOFEventHandler(out eof); if (!eof && FrxEventOnPrior != null) FrxEventOnPrior(); } catch (Exception ex) { throw ex; } } /// <summary> /// On check EndOfFile event handler /// </summary> private void OnCheckEOFEventHandler(out bool eof) { try { if (m_ChildTable == null) { eof = (nItem >= Rows.Count); } else { eof = (nItem >= m_ChildTable.Rows.Count); } } catch (Exception ex) { throw ex; } } /// <summary> /// On get value handler /// </summary> public void OnGetValueHandler(object VarName, out object Val) { try { if (m_ChildTable == null) { Val = Rows[nItem][VarName.ToString()]; } else { Val = m_ChildTable.Rows[nItem][VarName.ToString()]; } // FastReport does not know about System.Decimal object type // so convert it to Integer if (Val is Decimal) { Val = Decimal.ToInt32((Decimal)Val); } } catch (Exception ex) { throw ex; } } /// <summary> /// Updates FastReport UserDataSet on Column addition /// </summary> private void ColumnsCollection_Changed(object sender, CollectionChangeEventArgs e) { try { DataColumnCollection cols = (DataColumnCollection)sender; string FieldNames = null; foreach (DataColumn col in cols) FieldNames += col.Caption + "\n"; m_ds.Fields = FieldNames; } catch (Exception ex) { throw ex; } } private void InitializeComponent() { ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); // // FrxDataTable // ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); } } } 代码是粘的,也不知道从哪跟踪,再打开nItem 就成1了,然后就错了,

4,819

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧