C# 正在寻找一种更好的方法来用C语言组织我的图表#

C# 正在寻找一种更好的方法来用C语言组织我的图表#,c#,.net,if-statement,charts,C#,.net,If Statement,Charts,为了让你了解我的工作,我有两个下拉框。第一个下拉框包含4个应用程序的列表。第二个下拉框随我在第一个下拉框中的选择而动态更改。我在第二个下拉框中为每个选择都有一个图表。我一共有16张图表。每次我更改第二个选择时,图表都会更改,以便一次只显示一个图表。我使用if-else语句,这已经成为一种难以跟上的方式。我也有标签,我必须切换每个图表,使其失控。下面是我的else-if语句的一个小例子 else if (ddlApplication.SelectedItem.Text == "Rapp" &

为了让你了解我的工作,我有两个下拉框。第一个下拉框包含4个应用程序的列表。第二个下拉框随我在第一个下拉框中的选择而动态更改。我在第二个下拉框中为每个选择都有一个图表。我一共有16张图表。每次我更改第二个选择时,图表都会更改,以便一次只显示一个图表。我使用if-else语句,这已经成为一种难以跟上的方式。我也有标签,我必须切换每个图表,使其失控。下面是我的else-if语句的一个小例子

else if (ddlApplication.SelectedItem.Text == "Rapp" && ddlTests.SelectedItem.Text ==   "Total Test Runs")
        {
            string query = string.Format("select  TestName,Count (TestName) AS Counts  from VExecutionGlobalHistory where TestTypeID = 2 group by TestName", ddlTests.SelectedItem.Value);
            DataTable dt = GetData(query);

            //Loop and add each datatable row to the Pie Chart Values
            foreach (DataRow row in dt.Rows)
            {
                SpecificTestsRapp.PieChartValues.Add(new AjaxControlToolkit.PieChartValue
                {
                    Category = row["TestName"].ToString(),
                    Data = Convert.ToDecimal(row["Counts"])
                });
            }

            string SpecificTestsRappS = null;
            string sql2 = "select  Count (TestName) AS Counts from  VExecutionGlobalHistory where TestTypeID = 2 ";
            string connString2 = ";Initial  Catalog=Performance;User ID=;Password=";
            using (SqlConnection conn = new SqlConnection(connString2))
            {
                conn.Open();
                using (SqlCommand command = new SqlCommand(sql2, conn))
                {
                    SqlDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        SpecificTestsRappS = reader[0].ToString();
                        lblTotalTestsRapp.Text = SpecificTestsRappS;


                        break;
                    }
                }
                conn.Close();
            }

            SpecificTestsRapp.ChartTitle = "Total Tests Run";

            TotalTestsWeb6.Visible = false;
            HoursWeb6.Visible = false;
            TotalValidationsWeb6.Visible = false;
            CostComparisonWeb6.Visible = false;
            SpecificTestsWeb6.Visible = false;
            TotalTestsRapp.Visible = false;
            TotalValidationsRapp.Visible = false;
            SpecificTestsRapp.Visible = true;
            HoursRapp.Visible = false;
            IONChart.Visible = false;
            CostComparisonRapp.Visible = false;

            txtTotalHoursRapp.Visible = false;
            lblTotalHoursRapp.Visible = false;
            txtTotalHoursRappA.Visible = false;
            lblTotalHoursRappA.Visible = false;

            txtTotalCostRappM.Visible = false;
            lblTotalCostRappM.Visible = false;
            txtTotalCostRappA.Visible = false;
            lblTotalCostRappA.Visible = false;

            txtTotalTestsRapp.Visible = true;
            lblTotalTestsRapp.Visible = true;

            lblTotalValidationsRapp.Visible = false;
            txtTotalValidationsRapp.Visible = false;

            lblTotalValidations.Visible = false;
            txtTotalValidations.Visible = false;

            lblTotalTests.Visible = false;
            txtTotalTests.Visible = false;

            txtTotalHours.Visible = false;
            lblTotalHours.Visible = false;

            txtTotalHoursA.Visible = false;
            lblTotalHoursA.Visible = false;

            txtTotalCostA.Visible = false;
            lblTotalCostA.Visible = false;

            txtTotalCostM.Visible = false;
            lblTotalCostM.Visible = false;

            Label1.Visible = false;
            Label2.Visible = false;


        }
技术上,我需要16个这些当我完成,因为我有16个图表。必须有一种更有效的方法来做到这一点。有什么建议吗?

我在思考和设计模式

你可以采取以下行动:

在用户界面中:

var chartStartegyFactory = new ChartStrategyFactory();
var chartStategy = chartStartegyFactory.Create(ddlApplication.SelectedItem.Text, ddlTests.SelectedItem.Text);
var chart = chartStategy.CreateChart();

lblTotalTestsRapp.Text = chart.ChartData;
SpecificTestsRapp.ChartTitle = chart.ChartTitle;
TotalTestsWeb6.Visible = chart.TotalTestsWeb6Visible;
// continue assigning properties in your UI
在您的业务层中:

    public class ChartStrategyFactory
    {
        public IChartStrategy Create(string application, string test)
        {
            if (application == "Rapp" && test == "Total Test Runs")
                return new RappTotalTestsRunChartStrategy();
            // add strategies for other charts
            throw new NotSupportedException();
        }
    }

    public interface IChartStrategy
    {
        Chart CreateChart();
    }

    public class Chart
    {
        public string ChartTitle { get; set; }
        public string ChartData { get; set; }
        public bool TotalTestsWeb6Visible { get; set; }
        // create all properties you need
    }

    public class RappTotalTestsRunChartStrategy : IChartStrategy
    {
        public Chart CreateChart(){
            Chart chart = new Chart();
            chart.ChartData = GetDataFromDatabase();
            chart.ChartTitle = "Your Chart Title";
            chart.TotalTestsWeb6Visible = false;
            // continue assigning properties
            return chart;
        }
    }

基本上,图表创建代码将封装在每个Startegy中,您将获得可扩展性(在开发新图表时,只需修改图表策略工厂即可。

将代码格式化到左侧