2013-07-24 67 views
-1

所以要嘗試給你一個即時通訊工作的想法,我有兩個下拉框。第一個下拉框包含4個應用程序的列表。第二個下拉框隨着我在第一個下拉框中的選擇而動態變化。我有第二個下拉框中的每個選擇的圖表。我總共有16個圖表。每次更改第二個選擇時,圖表都會更改,以便一次只顯示一個圖表。我使用if else語句,它已成爲難以跟上的方式。我也有標籤,我必須切換每個圖表,以便它失去控制。這是我的一個if語句的一個小例子。尋找更好的方式來組織我的圖表在C#

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個。必須有一個更有效的方法來做到這一點。有什麼建議麼?

+0

將代碼格式化到左側 – Paparazzi

回答

1

我在想StartegyFactory的設計模式。

你可以做的東西線:

在你的UI:

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並且您將獲得可擴展性(在開發新圖表時修改ChartStrategyFactory就足夠了)。

相關問題