我的應用程式的多個位置都有以下代碼:
var subReport = new XRptEventHeader();
var eventHeaderList = FreqReports.GetEventHeaderList(studyPK);
var dataSourceSubReport = (XRSubreport)oRpt.FindControl("xrSubreportSite", false);
dataSourceSubReport.ReportSource = subReport;
dataSourceSubReport.ReportSource.DataSource = eventHeaderList;
它用于型別oRpt不同的多個地方。我試圖使用像這樣的通用東西
public static T SetEventHeader<T>(T oRpt , Guid studyPK)
{
var subReport = new XRptEventHeader();
var eventHeaderList = FreqReports.GetEventHeaderList(studyPK);
var dataSourceSubReport = (XtraReport)oRpt.FindControl("xrSubreportSite", false);
dataSourceSubReport.ReportSource = subReport;
dataSourceSubReport.ReportSource.DataSource = eventHeaderList;
return oRpt;
}
但是當我到達終點時
var dataSourceSubReport = (XtraReport)oRpt.FindControl("xrSubreportSite", false);
即使我使用每個類的基類進行轉換,oRpt它也沒有該FindControl功能。
有沒有人對我如何讓它發揮作用有任何建議?
uj5u.com熱心網友回復:
您需要做的是將 的值限制為T您所有oRpt共享的基類或介面。您可以通過添加“通用約束”來做到這一點。
在您的情況下,我懷疑您正在撰寫一個網站,因此您所有oRpts的基類都可以是System.Web.UI.Control。如果不是,則為您的特定需求制定適當的基型別(類或介面)。
public static T SetEventHeader<T>(T oRpt , Guid studyPK)
// Add a "generic constraint" to ensure T is a Control.
where T : System.Web.UI.Control
{
var subReport = new XRptEventHeader();
var eventHeaderList = FreqReports.GetEventHeaderList(studyPK);
var dataSourceSubReport = (XtraReport)oRpt.FindControl("xrSubreportSite", false);
dataSourceSubReport.ReportSource = subReport;
dataSourceSubReport.ReportSource.DataSource = eventHeaderList;
return oRpt;
}
uj5u.com熱心網友回復:
感謝 RB,因為他們給了我所需的資訊。這也讓我意識到我需要投射其他東西并嘗試/捕獲如果該部分由于某種原因不存在。這是最終有效的代碼:
public static T SetEventHeader<T>(T oRpt, Guid studyPK)
where T : XtraReport
{
try
{
XRSubreport dataSourceSubReport = oRpt.FindControl("xrSubreportSite", false) as XRSubreport;
var subReport = new XRptEventHeader();
var eventHeaderList = FreqReports.GetEventHeaderList(studyPK);
dataSourceSubReport.ReportSource = subReport;
dataSourceSubReport.ReportSource.DataSource = eventHeaderList;
return oRpt;
}
catch (Exception ex)
{
return oRpt; //subsection not present
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311137.html
