2017-07-13 5 views
1

J'essaie de créer un graphique pour afficher le pourcentage de livrets de réponses cochés et non cochés.Mais le graphique à secteurs n'affiche que la valeur non cochée qui est YValueMember. Comment résoudre ceci?ASP.NET Diagramme à secteurs affichant uniquement YValueMembers

protected void DropDown_Subjects_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Chart4.Visible = true; 
    SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Con"].ConnectionString); 
    SqlCommand cmd = new SqlCommand("select checked_percent, unchecked_percent From(select COUNT(*) * 100.0/(select count(*)from[newexam2017].[dbo].[newexam2017] where sub_code = '" + DropDown_Subjects.SelectedValue + "') as checked_percent from[newexam2017].[dbo].[newexam2017] where CheckBy is not null and sub_code = '" + DropDown_Subjects.SelectedValue + "')checked,(select COUNT(*) * 100.0/(select count(*)from[newexam2017].[dbo].[newexam2017] where sub_code = '" + DropDown_Subjects.SelectedValue + "')as unchecked_percent from[newexam2017].[dbo].[newexam2017] where CheckBy is null and sub_code = '" + DropDown_Subjects.SelectedValue + "')unchecked", connection); 
    connection.Open(); 


    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 

    DataTable ChartData = ds.Tables[0]; 
    Chart4.DataSource = ChartData; 

    Chart4.Series[0].Points.DataBind(ChartData.DefaultView, "checked_percent", "unchecked_percent", ""); 

    for (int i = 0; i < Chart4.Series[0].Points.Count; i++) 
    Chart4.Series[0].Points[i].Label = string.Format("{0:0.00}%", ChartData.Rows[i]["checked_percent"], "{0:0.00}%", ChartData.Rows[i]["unchecked_percent"]); 


    connection.Close(); 
    } 

Code asp:

 <asp:Chart ID="Chart4" runat="server" BackColor="DarkSlateBlue" BackGradientStyle="LeftRight" 
     BorderlineWidth="0" Height="440px" Palette="SeaGreen" PaletteCustomColors="24, 0, 0" 
     Width="560px" BorderlineColor="128, 128, 255" OnLoad="Chart4_Load"> 

      <Titles> 
      <asp:Title Name="DefaultTitle" Font="Trebuchet MS, 15pt, style=Bold" 
        Text = "Overall Scoring Progress" /> 
     </Titles> 
    <%-- <Legends> 
      <asp:Legend Name="DefaultLegend" Enabled="True" Docking="Top" /> 
     </Legends>--%> 

      <Series> 
       <asp:Series Name="Series1" IsValueShownAsLabel="true" YValuesPerPoint="10" ChartType="Pie"></asp:Series> 
      </Series> 
      <ChartAreas> 
       <asp:ChartArea Name="ChartArea4" > 

</asp:ChartArea> 
      </ChartAreas> 
     </asp:Chart> 

Ce que je veux:

chart1

ce que je reçois:

chart2

+0

Utilisez-vous Highcharts? Si oui, il semble que vous n'utilisiez pas [Highcharts .NET] (http://dotnet.highcharts.com/) et vous pourriez envisager de l'utiliser, car il s'agit de la solution prise en charge par Highcharts pour l'intégration avec l'environnement .NET. –

+0

Un graphique à secteurs peut uniquement afficher une valeur Y par point et ne contenir qu'une seule série. Jetez un coup d'oeil [ICI] (https://msdn.microsoft.com/fr-fr/library/dd456674.aspx) ;. Ou peut-être devriez-vous préciser quel résultat final vous voulez. Une image est toujours utile. – jsanalytics

+0

Vous pouvez également créer une étiquette personnalisée comme expliqué [ICI] (https://stackoverflow.com/questions/42338288/how-to-display-2-sets-of-data-on-the-same-axis-of -asp-net-chart/42343528? noredirect = 1 # comment77429532_42343528). Faites juste attention de ne pas créer un graphique "trompeur", étant donné que dans ce cas vous travaillez déjà avec des pourcentages. – jsanalytics

Répondre

1

Dans un graphique à secteurs, les deux, checked_percent et unchecked_percent, doivent être des valeurs Y. Comme ceci:

protected void Chart4_Load(object sender, EventArgs e) 
{ 
    Chart4.Series[0].Points.Add(new DataPoint(0, (double)ChartData.Rows[0]["unchecked_percent"])); 
    Chart4.Series[0].Points.Add(new DataPoint(1, (double)ChartData.Rows[0]["checked_percent"])); 
} 

enter image description here


EDIT: y compris les étiquettes personnalisées:

enter image description here

protected void Chart4_Load(object sender, EventArgs e) 
{ 
    DataPoint dp = new DataPoint(0, (double)ChartData.Rows[0]["unchecked_percent"]); 
    dp.Label = string.Format("unchecked\n{0:0.00}%", ChartData.Rows[0]["unchecked_percent"]); 
    Chart4.Series[0].Points.Add(dp); 

    dp = new DataPoint(1, (double)ChartData.Rows[0]["checked_percent"]); 
    dp.Label = string.Format("checked\n{0:0.00}%", ChartData.Rows[0]["checked_percent"]); 
    Chart4.Series[0].Points.Add(dp); 
} 
+0

Aussi besoin d'afficher les étiquettes correspondantes..i.e cochée, non cochée –

+0

S'il vous plaît voir mon ** EDIT **. – jsanalytics