表示Asp.net gridview绑定的不同数据源? (设计帮助)

时间:2012-11-16 20:55:17

标签: c# asp.net .net design-patterns

我遇到了一些设计问题,似乎总是遇到各种相同的问题。虽然我意识到存在设计问题,但我不能说出问题是什么,也不知道如何纠正它。

我遇到的一个问题是在抽象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方法。在给我麻烦之后,我想我没有理由有两种方法。

1 个答案:

答案 0 :(得分:0)

GridView有一个名为Columns的Readonly属性,它是一组列。它是readonly,但它的元素不是readonly,你可以添加/修改/删除元素。

如果你想购买一个轮子而不是重新发明它,我可以推荐Telerik。