读取XML格式文件内容

1.XML文件内容

<?xml version="1.0" encoding="utf-8" ?>
<ReportConfig>
  <Report ID="1" Title="The New Donor Information" >
    <Params>
      <ParamItem ParaType="ProfileTypeCheckBox" ParaTitle="機構類別" Para1Name="@ProfileTypeIds" />
      <ParamItem ParaType="DateRange" ParaTitle="成為捐款者日期" Para1Name="@StartDate" Para2Name="@EndDate"/>
      <ParamItem ParaType="EnabledStatus" ParaTitle="狀態" Para1Name="@EnabledStatus" />
    </Params>
    <SqlStatement>
      <![CDATA[
	SELECT * FROM [Profile] 
	WHERE MergeProfileID is null AND Status=1 AND case when len(@ProfileTypeIds)>0 then charindex(','+cast(ProfileType as varchar)+',','+@ProfileTypeIds+',') else 1 end >0 
		AND IsDonor=1 AND DonorDate BETWEEN @StartDate AND @EndDate 
      ]]>
    </SqlStatement>
  </Report>

  <Report ID="2" Title="The InKindItem Information">
    <Params>
      <ParamItem ParaType="DateRange" ParaTitle="饋贈日期" Para1Name="@StartDate" Para2Name="@EndDate"  Default1Value="-365" Default2Value="0" ConditionTitle="InKindItemDate"/>
    </Params>
    <SqlStatement>
      <![CDATA[
select * 
from ProfileInKindItem
where InKindDate between @StartDate and @EndDate
    
        ]]>
    </SqlStatement>
  </Report>    
</ReportConfig>


2. 定义类

public enum ReportTemplateType
{
AnalysisTool,
MgtAnalysis
}

    /// <summary>
    /// 主表報定義
    /// </summary>
    public class ReportAdapterSection
    {
        public string ID
        {
            get;
            set;
        }
        public string Title
        {
            get;
            set;
        }

        public string MasterSqlStatement
        {
            get;
            set;
        }
        public List<ReportParamSection> ParamSettings
        {
            get;
            set;
        }
        public string UniqueKey
        {
            get;
            set;
        }
        public string SummaryAmtOrNum
        {
            get;
            set;
        }
        public bool IsAddTotal
        {
            get;
            set;
        }
        public string Remark1
        {
            get;
            set;
        }
        public string Remark2
        {
            get;
            set;
        }
        public string Remark3
        {
            get;
            set;
        }
    }


    /// <summary>
    /// 報表參數:應用到Sql語句
    /// </summary>
    public class ReportParamSection
    {
        public string MainID
        {
            get;
            set;
        }
        public string Title
        {
            get;
            set;
        }
        public ReportParaType Type
        {
            get;
            set;
        }
        public string[] Params
        {
            get;
            set;
        }
        public string[] DefaultValues
        {
            get;
            set;
        }
        public string ConditionTitle
        {
            get;
            set;
        }
    }


3.获取实体类:

    /// <summary>
    /// XML报表实体类
    /// </summary>
    public static class ReportAdapterUtility
    {
        /// <summary>
        /// 獲取參數的值
        /// </summary>
        public static Dictionary<string,object> GetParamNameValues(ReportAdapterSection section,List<HtmlTableRow> postTableRows)
        {
            string key = "_" + section.ID;
            Dictionary<string,object> paras = new Dictionary<string,object>();
            for (int i = 0; i < section.ParamSettings.Count; i++)
            {
                var paraSetting = section.ParamSettings[i];
                var cotainerCell = postTableRows[i].Cells[1];
                switch (paraSetting.Type)
                {
                    case ReportParaType.DateRange:
                        DatePicker datePicker1 = cotainerCell.FindControl(paraSetting.Params[0] + key) as DatePicker;
                        DatePicker datePicker2 = cotainerCell.FindControl(paraSetting.Params[1] + key) as DatePicker;
                        if (datePicker1.SelectedDate.HasValue)
                        {
                            paras.Add(paraSetting.Params[0],datePicker1.SelectedDate);
                        }
                        else
                        {
                            paras.Add(paraSetting.Params[0],"1900-01-01");
                        }
                        if (datePicker2.SelectedDate.HasValue)
                        {
                            paras.Add(paraSetting.Params[1],datePicker2.SelectedDate);
                        }
                        else
                        {
                            paras.Add(paraSetting.Params[1],"9999-12-31");
                        }
                        break;
                    case ReportParaType.IntRange:
                        TextBox intTextBox1 = cotainerCell.FindControl(paraSetting.Params[0] + key) as TextBox;
                        int intValue1 = 0;
                        if (int.TryParse(intTextBox1.Text,out intValue1))
                        {
                            paras.Add(paraSetting.Params[0],intValue1);
                        }
                        else
                        {
                            paras.Add(paraSetting.Params[0],0);
                        }
                        TextBox intTextBox2 = cotainerCell.FindControl(paraSetting.Params[1] + key) as TextBox;
                        int intValue2 = 0;
                        if (int.TryParse(intTextBox2.Text,out intValue2))
                        {
                            paras.Add(paraSetting.Params[1],intValue2);
                        }
                        else
                        {
                            paras.Add(paraSetting.Params[1],99999999);
                        }
                        break;
                    case ReportParaType.MoneyRange:
                        TextBox MoneyTextBox1 = cotainerCell.FindControl(paraSetting.Params[0] + key) as TextBox;
                        decimal moneyValue1 = 0;
                        if (decimal.TryParse(MoneyTextBox1.Text,out moneyValue1))
                        {
                            paras.Add(paraSetting.Params[0],moneyValue1);
                        }
                        else
                        {
                            paras.Add(paraSetting.Params[0],-99999999);
                        }
                        TextBox MoneyTextBox2 = cotainerCell.FindControl(paraSetting.Params[1] + key) as TextBox;
                        decimal moneyValue2 = 0;
                        if (decimal.TryParse(MoneyTextBox2.Text,out moneyValue2))
                        {
                            paras.Add(paraSetting.Params[1],moneyValue2);
                        }
                        else
                        {
                            paras.Add(paraSetting.Params[1],99999999);
                        }
                        break;
                    case ReportParaType.ServiceNatureID:
                        DropDownList ddl_ServiceNature = cotainerCell.FindControl(paraSetting.Params[0] + key) as DropDownList;
                        paras.Add(paraSetting.Params[0],ddl_ServiceNature.SelectedValue);
                        break;
                    case ReportParaType.EventID:
                        DropDownList ddl_Event = cotainerCell.FindControl(paraSetting.Params[0] + key) as DropDownList;
                        paras.Add(paraSetting.Params[0],ddl_Event.SelectedValue);
                        break;
                    case ReportParaType.ProfileTypeCheckBox:
                        CheckBoxList cbl_ProfileType = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        string ids = cbl_ProfileType.GetSelectedValues(t => int.Parse(t)).ToString(t => t.ToString(),",");
                        paras.Add(paraSetting.Params[0],ids);
                        break;
                    case ReportParaType.DonationStatusCheckBox:
                        CheckBoxList cbl_DonationStatus = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        string DonationStatusIds = cbl_DonationStatus.GetSelectedValues(t => int.Parse(t)).ToString(t => t.ToString(),DonationStatusIds);
                        break;
                    case ReportParaType.ServiceNatureCheckBox:
                        CheckBoxList cbl_ServiceNature = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        string ServiceNatureIds = cbl_ServiceNature.GetSelectedValues(t => int.Parse(t)).ToString(t => t.ToString(),");
                        string rightServiceNatureIds = CommonMethod.GetReportServiceNatureRights();
                        paras.Add(paraSetting.Params[0],string.IsNullOrWhiteSpace(ServiceNatureIds) ? rightServiceNatureIds : ServiceNatureIds);
                        break;
                    case ReportParaType.EnabledStatus:
                        CheckBoxList cbl_EnabledStatus = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        string EnabledStatusIds = cbl_EnabledStatus.GetSelectedValues(t => int.Parse(t)).ToString(t => t.ToString(),");
                        EnabledStatusIds = EnabledStatusIds == "1,0" ? "" : EnabledStatusIds;
                        paras.Add(paraSetting.Params[0],EnabledStatusIds);
                        break;
                    case ReportParaType.HCCCheckBox:
                        CheckBoxList cbl_HCCCheckBox = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        string HccIds = cbl_HCCCheckBox.GetSelectedValues(t => int.Parse(t)).ToString(t => t.ToString(),HccIds);
                        break;
                    case ReportParaType.IsVip:
                        CheckBoxList cbl_IsVip = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        string VipIds = cbl_IsVip.GetSelectedValues(t => int.Parse(t)).ToString(t => t.ToString(),");
                        VipIds = VipIds == "1,0" ? "" : VipIds;
                        paras.Add(paraSetting.Params[0],VipIds);
                        break;
                }
            }
            return paras;
        }

        /// <summary>
        /// 獲取參數條件表達式
        /// </summary>
        public static string GetParamCondition(ReportAdapterSection section,List<HtmlTableRow> postTableRows)
        {
            string key = "_" + section.ID;
            string condition = string.Empty;
            for (int i = 0; i < section.ParamSettings.Count; i++)
            {
                var paraSetting = section.ParamSettings[i];
                var cotainerCell = postTableRows[i].Cells[1];
                string where = string.Empty;
                switch (paraSetting.Type)
                {
                    case ReportParaType.DateRange:
                        DatePicker datePicker1 = cotainerCell.FindControl(paraSetting.Params[0] + key) as DatePicker;
                        DatePicker datePicker2 = cotainerCell.FindControl(paraSetting.Params[1] + key) as DatePicker;
                        string dateCondition = string.IsNullOrWhiteSpace(paraSetting.ConditionTitle) ? "Donation Date" : paraSetting.ConditionTitle;
                        if (!string.IsNullOrWhiteSpace(datePicker1.SelectedDate.ToString()))
                        {
                            where = dateCondition + ": From " + datePicker1.SelectedDate.Value.ToShortDateString();
                        }
                        if (!string.IsNullOrWhiteSpace(datePicker2.SelectedDate.ToString()))
                        {
                            if (!string.IsNullOrWhiteSpace(datePicker1.SelectedDate.ToString()))
                            {
                                where = dateCondition + ": From " + datePicker1.SelectedDate.Value.ToShortDateString() + " to " + datePicker2.SelectedDate.Value.ToShortDateString();
                            }
                            else
                            {
                                where = dateCondition + ": to " + datePicker2.SelectedDate.Value.ToShortDateString();
                            }
                        }
                        break;
                    case ReportParaType.IntRange:
                        TextBox intTextBox1 = cotainerCell.FindControl(paraSetting.Params[0] + key) as TextBox;
                        TextBox intTextBox2 = cotainerCell.FindControl(paraSetting.Params[1] + key) as TextBox;
                        int intValue1 = 0;
                        int intValue2 = 0;
                        string countCondition = string.IsNullOrWhiteSpace(paraSetting.ConditionTitle) ? "Donation Count" : paraSetting.ConditionTitle;
                        if (int.TryParse(intTextBox1.Text,out intValue1))
                        {
                            where = countCondition + ": From " + intValue1.ToString();
                        }
                        if (int.TryParse(intTextBox2.Text,out intValue2))
                        {
                            if (intValue1 > 0)
                            {
                                where += " To " + intValue2.ToString();
                            }
                            else
                            {
                                where = countCondition + ": To " + intValue2.ToString();
                            }
                        }
                        break;
                    case ReportParaType.MoneyRange:
                        TextBox MoneyTextBox1 = cotainerCell.FindControl(paraSetting.Params[0] + key) as TextBox;
                        TextBox MoneyTextBox2 = cotainerCell.FindControl(paraSetting.Params[1] + key) as TextBox;
                        decimal moneyValue1 = 0;
                        decimal moneyValue2 = 0;
                        string amountCondition = string.IsNullOrWhiteSpace(paraSetting.ConditionTitle) ? "Donation Amount" : paraSetting.ConditionTitle;
                        if (decimal.TryParse(MoneyTextBox1.Text,out moneyValue1))
                        {
                            where = amountCondition + ": From " + moneyValue1.ToString();
                        }
                        if (decimal.TryParse(MoneyTextBox2.Text,out moneyValue2))
                        {
                            if (moneyValue1 > 0)
                            {
                                where += " To " + moneyValue2.ToString();
                            }
                            else
                            {
                                where = amountCondition + ": To " + moneyValue2.ToString();
                            }
                        }
                        break;
                    case ReportParaType.ServiceNatureID:
                        DropDownList ddl_ServiceNature = cotainerCell.FindControl(paraSetting.Params[0] + key) as DropDownList;
                        int ID = int.Parse(ddl_ServiceNature.SelectedValue);
                        string ServiceNatureName = string.Empty;
                        ServiceNatureORM dataModel = BaseInfoSRV.GetServiceNatureByID(ID);
                        ServiceNatureName = dataModel == null ? string.Empty : dataModel.NameEN;

                        where = "Service Nature: " + ServiceNatureName;
                        break;
                    case ReportParaType.EventID:
                        DropDownList ddl_Event = cotainerCell.FindControl(paraSetting.Params[0] + key) as DropDownList;
                        if (ddl_Event.Items.Count > 0)
                        {
                            where = "Event: " + ddl_Event.SelectedItem.Text;
                        }
                        break;
                    case ReportParaType.ProfileTypeCheckBox:
                        CheckBoxList cbl_ProfileType = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        foreach (ListItem item in cbl_ProfileType.Items)
                        {
                            if (item.Selected)
                            {
                                where += (where.Length > 0 ? "," : "") + item.Text;
                            }
                        }
                        where = string.IsNullOrWhiteSpace(where) ? "" : (Environment.NewLine + "ProfileType: " + where);
                        break;
                    case ReportParaType.DonationStatusCheckBox:
                        CheckBoxList cbl_DonationStatus = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        foreach (ListItem item in cbl_DonationStatus.Items)
                        {
                            if (item.Selected)
                            {
                                where += (where.Length > 0 ? "," : "") + item.Text;
                            }
                        }
                        where = string.IsNullOrWhiteSpace(where) ? "" : (Environment.NewLine + "Donation Status: " + where);
                        break;
                    case ReportParaType.ServiceNatureCheckBox:
                        CheckBoxList cbl_ServiceNature = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        foreach (ListItem item in cbl_ServiceNature.Items)
                        {
                            if (item.Selected)
                            {
                                where += (where.Length > 0 ? "," : "") + item.Text;
                            }
                        }
                        where = string.IsNullOrWhiteSpace(where) ? "" : (Environment.NewLine + "Service Nature: " + where);
                        break;
                    case ReportParaType.EnabledStatus:
                        CheckBoxList cbl_EnabledStatus = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        foreach (ListItem item in cbl_EnabledStatus.Items)
                        {
                            if (item.Selected)
                            {
                                where += (where.Length > 0 ? "," : "") + item.Text;
                            }
                        }
                        where = string.IsNullOrWhiteSpace(where) ? "" : (Environment.NewLine + "Enabled Status: " + where);
                        break;
                    case ReportParaType.HCCCheckBox:
                        CheckBoxList cbl_HCCCheckBox = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        foreach (ListItem item in cbl_HCCCheckBox.Items)
                        {
                            if (item.Selected)
                            {
                                where += (where.Length > 0 ? "," : "") + item.Text;
                            }
                        }
                        where = string.IsNullOrWhiteSpace(where) ? "" : (Environment.NewLine + "HCC Item: " + where);
                        break;
                    case ReportParaType.IsVip:
                        CheckBoxList cbl_IsVip = cotainerCell.FindControl(paraSetting.Params[0] + key) as CheckBoxList;
                        foreach (ListItem item in cbl_IsVip.Items)
                        {
                            if (item.Selected)
                            {
                                where += (where.Length > 0 ? "," : "") + item.Text;
                            }
                        }
                        where = string.IsNullOrWhiteSpace(where) ? "" : (Environment.NewLine + "Haven Of Hope VIP: " + where);
                        break;
                }
                condition += string.IsNullOrWhiteSpace(where) ? "" : (where + "\r");
            }
            return condition;
        }


        /// <summary>
        /// 获取一个XML档所有ID和报表名称
        /// </summary>
        public static Dictionary<string,string> GetReportAdapterSectionList(ProfileRole RoleType,ReportTemplateType TemplateType)
        {
            XmlDocument xmlDoc = new XmlDocument();
            string configFile = GetReportConfigFile(RoleType,TemplateType);
            xmlDoc.Load(configFile);
            XmlNodeList nodes = xmlDoc.SelectSingleNode("ReportConfig").ChildNodes;
            Dictionary<string,string> reportNameList = new Dictionary<string,string>();
            foreach (XmlElement node in nodes)
            {
                string ID = node.Attributes["ID"].Value;
                string Title = node.Attributes["Title"].Value;
                reportNameList.Add(ID,Title);
            }
            return reportNameList;
        }


        /// <summary>
        /// 获取一个报表的参数
        /// </summary>
        public static ReportAdapterSection GetReportAdapterSectionByID(string ReportID,ProfileRole RoleType,ReportTemplateType TemplateType)
        {
            ReportAdapterSection reportModel = new ReportAdapterSection();
            XmlDocument xmlDoc = new XmlDocument();
            string configFile = GetReportConfigFile(RoleType,TemplateType);
            xmlDoc.Load(configFile);
            XmlNodeList nodes = xmlDoc.SelectSingleNode("ReportConfig").ChildNodes;
            List<ReportParamSection> list = new List<ReportParamSection>();

            foreach (XmlElement node in nodes)
            {
                if (node.HasChildNodes && node.Attributes["ID"].Value == ReportID)
                {
                    string MainID = node.Attributes["ID"].Value;
                    reportModel.ID = MainID;
                    reportModel.Title = node.Attributes["Title"].Value;
                    string UniqueKey = string.Empty;
                    if (node.Attributes["UniqueKey"] != null)
                    {
                        UniqueKey = node.Attributes["UniqueKey"].Value;
                    }
                    reportModel.UniqueKey = UniqueKey;
                    string SummaryAmtOrNum = string.Empty;
                    if (node.Attributes["SummaryAmtOrNum"] != null)
                    {
                        SummaryAmtOrNum = node.Attributes["SummaryAmtOrNum"].Value;
                    }
                    reportModel.SummaryAmtOrNum = SummaryAmtOrNum;

                    bool IsAddTotal = false;
                    if (node.Attributes["IsAddTotal"] != null)
                    {
                        IsAddTotal = node.Attributes["IsAddTotal"].Value == "1" ? true : false;
                    }
                    reportModel.IsAddTotal = IsAddTotal;
                    XmlNode paramsNode = node.SelectSingleNode("Params");
                    if (paramsNode != null && paramsNode.HasChildNodes)
                    {
                        foreach (XmlElement item in paramsNode)
                        {
                            ReportParamSection model = new ReportParamSection();
                            model.MainID = MainID;
                            model.Title = item.Attributes["ParaTitle"].Value;
                            model.Type = (ReportParaType)Enum.Parse(typeof(ReportParaType),item.Attributes["ParaType"].Value);

                            //参数
                            string paras1 = string.Empty,paras2 = string.Empty;
                            paras1 = item.Attributes["Para1Name"].Value;
                            if (item.Attributes["Para2Name"] != null)
                            {
                                paras2 = item.Attributes["Para2Name"].Value;
                            }
                            model.Params = new string[] { paras1,paras2 };
                            //默认值
                            string dvalue1 = string.Empty,dvalue2 = string.Empty;
                            if (item.Attributes["Default1Value"] != null)
                            {
                                dvalue1 = item.Attributes["Default1Value"].Value;
                            }
                            if (item.Attributes["Default2Value"] != null)
                            {
                                dvalue2 = item.Attributes["Default2Value"].Value;
                            }
                            model.DefaultValues = new string[] { dvalue1,dvalue2 };
                            //条件标题
                            string ConditionTitle = string.Empty;
                            if (item.Attributes["ConditionTitle"] != null)
                            {
                                ConditionTitle = item.Attributes["ConditionTitle"].Value;
                            }
                            model.ConditionTitle = ConditionTitle;
                            list.Add(model);
                        }
                    }
                    XmlNode sqlNode = node.SelectSingleNode("SqlStatement");
                    reportModel.MasterSqlStatement = sqlNode.InnerText;
                    if (node.SelectSingleNode("Remark1") != null)
                    {
                        reportModel.Remark1 = node.SelectSingleNode("Remark1").Attributes["Text"].Value;
                    }
                    if (node.SelectSingleNode("Remark2") != null)
                    {
                        reportModel.Remark2 = node.SelectSingleNode("Remark2").Attributes["Text"].Value;
                    }
                    if (node.SelectSingleNode("Remark3") != null)
                    {
                        reportModel.Remark3 = node.SelectSingleNode("Remark3").Attributes["Text"].Value;
                    }
                }
            }
            reportModel.ParamSettings = list;
            return reportModel;
        }


        /// <summary>
        /// 由ReportAdapterSection创建TableRow
        /// </summary>
        public static List<HtmlTableRow> CreateTableRowList(ReportAdapterSection section)
        {
            List<HtmlTableRow> ParamToControls = new List<HtmlTableRow>();
            foreach (ReportParamSection item in section.ParamSettings)
            {
                ParamToControls.Add(CreateParamInputTableRow(item));
            }
            return ParamToControls;
        }

        /// <summary>
        /// 自动创建控件
        /// </summary>
        private static HtmlTableRow CreateParamInputTableRow(ReportParamSection obj)
        {
            string ServiceNatureIds = string.Empty;
            string key = "_" + obj.MainID;
            HtmlTableRow row = new HtmlTableRow();
            HtmlTableCell cell1 = new HtmlTableCell();
            cell1.InnerText = obj.Title + ":";
            cell1.Attributes["class"] = "capitalField field";
            row.Cells.Add(cell1);
            HtmlTableCell cell2 = new HtmlTableCell();
            cell2.Attributes["class"] = "field";
            row.Cells.Add(cell2);
            switch (obj.Type)
            {
                case ReportParaType.DateRange:
                    Literal dlit1 = new Literal() { Text = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr><td style=\"width: 15px; text-align: center\">由</td><td style=\"width: 155px;\">" };
                    Literal dlit2 = new Literal() { Text = "</td><td style=\"width: 20px; text-align: center\">至</td><td style=\"width: 180px;\">" };
                    Literal dlit3 = new Literal() { Text = "</td></tr></table>" };
                    DatePicker datePicker1 = new DatePicker();
                    DatePicker datePicker2 = new DatePicker();
                    datePicker1.Width = 150;
                    datePicker1.ID = obj.Params[0] + key;
                    datePicker2.Width = 150;
                    datePicker2.ID = obj.Params[1] + key;
                    int days;
                    if (obj.DefaultValues[0] != null)
                    {
                        if (int.TryParse(obj.DefaultValues[0],out days))
                        {
                            datePicker1.SelectedDate = DateTime.Today.AddDays(days);
                        }
                    }
                    if (obj.DefaultValues[1] != null)
                    {
                        if (int.TryParse(obj.DefaultValues[1],out days))
                        {
                            datePicker2.SelectedDate = DateTime.Today.AddDays(days);
                        }
                    }
                    cell2.Controls.Add(dlit1);
                    cell2.Controls.Add(datePicker1);
                    cell2.Controls.Add(dlit2);
                    cell2.Controls.Add(datePicker2);
                    cell2.Controls.Add(dlit3);
                    break;
                case ReportParaType.IntRange:
                    Literal ilit1 = new Literal() { Text = "  由  " };
                    Literal ilit2 = new Literal() { Text = "  至  " };
                    TextBox txt_MinCount = new TextBox();
                    TextBox txt_MaxCount = new TextBox();
                    txt_MinCount.ID = obj.Params[0] + key;
                    txt_MaxCount.ID = obj.Params[1] + key;
                    int count;
                    txt_MinCount.Text = "";
                    if (obj.DefaultValues[0] != null)
                    {
                        if (int.TryParse(obj.DefaultValues[0],out count))
                        {
                            txt_MinCount.Text = count.ToString();
                        }
                    }
                    txt_MaxCount.Text = "";
                    if (obj.DefaultValues[1] != null)
                    {
                        if (int.TryParse(obj.DefaultValues[1],out count))
                        {
                            txt_MaxCount.Text = count.ToString();
                        }
                    }

                    cell2.Controls.Add(ilit1);
                    cell2.Controls.Add(txt_MinCount);
                    cell2.Controls.Add(ilit2);
                    cell2.Controls.Add(txt_MaxCount);
                    break;
                case ReportParaType.MoneyRange:
                    Literal mlit1 = new Literal() { Text = "  由  " };
                    Literal mlit2 = new Literal() { Text = "  至  " };
                    TextBox txt_MinAmount = new TextBox();
                    TextBox txt_MaxAmount = new TextBox();
                    txt_MinAmount.ID = obj.Params[0] + key;
                    txt_MaxAmount.ID = obj.Params[1] + key;
                    decimal amount;
                    txt_MinAmount.Text = "";
                    if (obj.DefaultValues[0] != null)
                    {
                        if (decimal.TryParse(obj.DefaultValues[0],out amount))
                        {
                            txt_MinAmount.Text = amount.ToString();
                        }
                    }
                    txt_MaxAmount.Text = "";
                    if (obj.DefaultValues[1] != null)
                    {
                        if (decimal.TryParse(obj.DefaultValues[1],out amount))
                        {
                            txt_MaxAmount.Text = amount.ToString();
                        }
                    }
                    cell2.Controls.Add(mlit1);
                    cell2.Controls.Add(txt_MinAmount);
                    cell2.Controls.Add(mlit2);
                    cell2.Controls.Add(txt_MaxAmount);
                    break;
                case ReportParaType.ProfileTypeCheckBox:
                    CheckBoxList cbl_ProfileType = new CheckBoxList();
                    cbl_ProfileType.ID = obj.Params[0] + key;
                    cbl_ProfileType.DataSource = EnumDataUtility.GetEnumItemCollection<ProfileType>().ToList().Select(t => { return new { Text = t.Description,Value = t.Value }; });
                    cbl_ProfileType.DataTextField = "Text";
                    cbl_ProfileType.DataValueField = "Value";
                    cbl_ProfileType.DataBind();
                    cbl_ProfileType.RepeatColumns = 6;
                    cbl_ProfileType.RepeatDirection = RepeatDirection.Horizontal;
                    cbl_ProfileType.CssClass = "itemlist-mulrow-fixed";
                    cbl_ProfileType.Attributes["Width"] = "100%";
                    cell2.Controls.Add(cbl_ProfileType);
                    break;
                case ReportParaType.DonationStatusCheckBox:
                    CheckBoxList cbl_DonationStatus = new CheckBoxList();
                    cbl_DonationStatus.ID = obj.Params[0] + key;
                    cbl_DonationStatus.DataSource = EnumDataUtility.GetEnumItemCollection<DonationStatus>().ToList().Select(t => { return new { Text = t.Description,Value = t.Value }; });
                    cbl_DonationStatus.DataTextField = "Text";
                    cbl_DonationStatus.DataValueField = "Value";
                    cbl_DonationStatus.DataBind();
                    cbl_DonationStatus.RepeatColumns = 5;
                    cbl_DonationStatus.RepeatDirection = RepeatDirection.Horizontal;
                    cbl_DonationStatus.CssClass = "itemlist-mulrow-fixed";
                    cbl_DonationStatus.Attributes["Width"] = "100%";
                    cell2.Controls.Add(cbl_DonationStatus);
                    break;
                case ReportParaType.EnabledStatus:
                    CheckBoxList cbl_EnabledStatus = new CheckBoxList();
                    cbl_EnabledStatus.ID = obj.Params[0] + key;
                    cbl_EnabledStatus.DataSource = EnumDataUtility.GetEnumItemCollection<EnabledStatus>().ToList().Select(t => { return new { Text = t.Description,Value = t.Value }; });
                    cbl_EnabledStatus.DataTextField = "Text";
                    cbl_EnabledStatus.DataValueField = "Value";
                    cbl_EnabledStatus.DataBind();
                    cbl_EnabledStatus.RepeatColumns = 2;
                    cbl_EnabledStatus.RepeatDirection = RepeatDirection.Horizontal;
                    cbl_EnabledStatus.CssClass = "itemlist-mulrow-fixed";
                    cbl_EnabledStatus.Attributes["Width"] = "200";
                    cell2.Controls.Add(cbl_EnabledStatus);
                    break;
                case ReportParaType.ServiceNatureCheckBox:
                    CheckBoxList cbl_ServiceNature = new CheckBoxList();
                    cbl_ServiceNature.ID = obj.Params[0] + key;
                    ServiceNatureIds = CommonMethod.GetReportServiceNatureRights();
                    cbl_ServiceNature.DataSource = BaseInfoSRV.GetServiceNatureListByIds(ServiceNatureIds).ToList().Select(t => { return new ListItem() { Text = t.NameCN,Value = t.ID.ToString() }; }).ToList();
                    cbl_ServiceNature.DataTextField = "Text";
                    cbl_ServiceNature.DataValueField = "Value";
                    cbl_ServiceNature.DataBind();
                    cbl_ServiceNature.RepeatColumns = 5;
                    cbl_ServiceNature.RepeatDirection = RepeatDirection.Horizontal;
                    cbl_ServiceNature.CssClass = "itemlist-mulrow-fixed";
                    cbl_ServiceNature.Attributes["Width"] = "100%";
                    cell2.Controls.Add(cbl_ServiceNature);

                    break;
                case ReportParaType.ServiceNatureID:
                    DropDownList ddl_ServiceNature = new DropDownList();
                    ddl_ServiceNature.ID = obj.Params[0] + key;
                    ServiceNatureIds = CommonMethod.GetReportServiceNatureRights();
                    ddl_ServiceNature.DataSource = BaseInfoSRV.GetServiceNatureListByIds(ServiceNatureIds).ToList().Select(t => { return new ListItem() { Text = t.NameCN,Value = t.ID.ToString() }; }).ToList();
                    ddl_ServiceNature.DataTextField = "Text";
                    ddl_ServiceNature.DataValueField = "Value";
                    ddl_ServiceNature.DataBind();
                    ddl_ServiceNature.Width = 340;
                    cell2.Controls.Add(ddl_ServiceNature);
                    break;
                case ReportParaType.EventID:
                    DropDownList ddl_Event = new DropDownList();
                    ddl_Event.ID = obj.Params[0] + key;
                    ddl_Event.DataSource = ActivitySRV.GetAllEventList(true).ToList().Select(t => { return new ListItem() { Text = t.EventCode + " " + t.NameCN,Value = t.ID.ToString() }; }).ToList();
                    ddl_Event.DataTextField = "Text";
                    ddl_Event.DataValueField = "Value";
                    ddl_Event.DataBind();
                    ddl_Event.Width = 340;
                    cell2.Controls.Add(ddl_Event);
                    break;
                case ReportParaType.HCCCheckBox:
                    CheckBoxList cbl_HCC = new CheckBoxList();
                    cbl_HCC.ID = obj.Params[0] + key;
                    cbl_HCC.DataSource = ProfileSRV.GetProfilePropertyListByItemKey(ProfileEnumData.HCC.ToEnumDescriptionByType()).ToList().Select(t => { return new { Text = t.NameCN,Value = t.ItemTypeID }; });
                    cbl_HCC.DataTextField = "Text";
                    cbl_HCC.DataValueField = "Value";
                    cbl_HCC.DataBind();
                    cbl_HCC.RepeatColumns = 6;
                    cbl_HCC.RepeatDirection = RepeatDirection.Horizontal;
                    cbl_HCC.CssClass = "itemlist-mulrow-fixed";
                    cbl_HCC.Attributes["Width"] = "100%";
                    cell2.Controls.Add(cbl_HCC);
                    break;
                case ReportParaType.IsVip:
                    CheckBoxList cbl_IsVip = new CheckBoxList();
                    cbl_IsVip.ID = obj.Params[0] + key;
                    cbl_IsVip.DataSource = EnumDataUtility.GetEnumItemCollection<BoolToYesNo>().ToList().Select(t => { return new { Text = t.Description,Value = t.Value }; });
                    cbl_IsVip.DataTextField = "Text";
                    cbl_IsVip.DataValueField = "Value";
                    cbl_IsVip.DataBind();
                    cbl_IsVip.RepeatColumns = 2;
                    cbl_IsVip.RepeatDirection = RepeatDirection.Horizontal;
                    cbl_IsVip.CssClass = "itemlist-mulrow-fixed";
                    cbl_IsVip.Attributes["Width"] = "200";
                    cell2.Controls.Add(cbl_IsVip);
                    break;
            }
            return row;
        }


        /// <summary>
        /// 获取XML档文件路径
        /// </summary>
        private static string GetReportConfigFile(ProfileRole RoleType,ReportTemplateType TemplateType)
        {
            string folder = HttpContext.Current.Server.MapPath("~/Pages/Report/XML");
            string fileName = string.Empty;
            switch (TemplateType)
            {
                case ReportTemplateType.AnalysisTool:
                    switch (RoleType)
                    {
                        case ProfileRole.Donor:
                            fileName = "Donor_AnalysisTool.xml";
                            break;
                        case ProfileRole.KOL:
                            fileName = "KOL_AnalysisTool.xml";
                            break;
                        case ProfileRole.Media:
                            fileName = "Media_AnalysisTool.xml";
                            break;
                        case ProfileRole.PotentialSupporter:
                            fileName = "PS_AnalysisTool.xml";
                            break;
                        case ProfileRole.Volunteer:
                            fileName = "Volunteer_AnalysisTool.xml";
                            break;
                        default:
                            throw new InvalidCastException(RoleType.ToString());

                    }
                    break;
                case ReportTemplateType.MgtAnalysis:
                    switch (RoleType)
                    {
                        case ProfileRole.Donor:
                            fileName = "Donor_MgtAnalysis.xml";
                            break;
                        case ProfileRole.KOL:
                            fileName = "KOL_MgtAnalysis.xml";
                            break;
                        case ProfileRole.Media:
                            fileName = "Media_MgtAnalysis.xml";
                            break;
                        case ProfileRole.PotentialSupporter:
                            fileName = "PS_MgtAnalysis.xml";
                            break;
                        case ProfileRole.Volunteer:
                            fileName = "Volunteer_MgtAnalysis.xml";
                            break;
                        default:
                            throw new InvalidCastException(RoleType.ToString());
                    }
                    break;
                default:
                    throw new InvalidCastException(TemplateType.ToString());
            }
            return System.IO.Path.Combine(folder,fileName);
        }

    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇