我遇到了一些设计问题,似乎总是遇到各种相同的问题。虽然我意识到存在设计问题,但我不能说出问题是什么,也不知道如何纠正它。
我遇到的一个问题是在抽象DAO访问的代码中。我喜欢这个想法,因为我可以转移到基于服务的数据检索,影响最小(我相信)。可以通过现有方法添加和访问更多报告。
此外,由于每个报告都包含自己的一组列,我不知道允许GridView加载它们的方法(由于空接口,我发布的代码没有运行。)
我的目标是能够从列表中选择“报告”,然后根据报告填充网格视图。
public void LoadReportFor(string reportName)
{
GridView1.DataSource = RetrieveReportDataFor(reportName, DateTime.Now);
GridView1.DataBind();
}
private List<IReportRecord> RetrieveReportDataFor(string reportName, DateTime date)
{
List<IReportRecord> records;
switch (reportName)
{
case "Timesheet":
records = reportSDAO.GetTimeSheetReport(date);
break;
case "Salary":
records = reportsDAO.GetSalaryReport(date);
break;
default:
records = new List<IReportRecord>();
}
return records;
}
public class TimeSheetRecord : IReportRecord
{
public string DayOfWeek { get; set; }
public int EmpID { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public double HoursWorked { get; set; }
}
public class SalaryRecord : IReportRecord
{
public int EmpID { get; set; }
public double Salary { get; set; }
}
public interface IReportRecord
{
}
}
更新
我决定合并LoadReportFor和RetrieveReportDataFor方法。在给我麻烦之后,我想我没有理由有两种方法。
答案 0 :(得分:0)
GridView有一个名为Columns的Readonly属性,它是一组列。它是readonly,但它的元素不是readonly,你可以添加/修改/删除元素。
如果你想购买一个轮子而不是重新发明它,我可以推荐Telerik。