Вывод результатов SQL-запроса определенным образом для отображения в круговой диаграмме

Извиняюсь за неясный вопрос, так как я не уверен, как точно его сформулировать.

У меня есть следующий запрос, который подсчитывает количество студентов, которые заплатили, еще не заплатили и частично заплатили за определенный год.

SELECT DISTINCT 
            (SELECT COUNT(*) AS Expr1
             FROM fee_payments
             WHERE (fee_remaining = 0)) AS Fully_Paid,
            (SELECT COUNT(*) AS Expr1
             FROM fee_payments AS fee_payments_3
             WHERE (fee_remaining = fee_required)) AS Unpaid,
            (SELECT COUNT(*) AS Expr1
             FROM fee_payments AS fee_payments_2
             WHERE (fee_remaining > 0)
               AND (fee_remaining <> fee_required)) AS Partially_Paid
        FROM 
            fee_payments AS fee_payments_1

Выходные данные отображаются как

Fully_Paid | Unpaid | Partially_Paid
-------------------------------------
     8     |   1    |       5

У меня есть следующий C# для моей круговой диаграммы

public partial class feestatistics: System.Web.UI.Page {
 protected void Page_Load(object sender, EventArgs e) {
  //populate ddl
  if (!IsPostBack) {
   string query = "SELECT year_id, year_title FROM year";
   DataTable dt = GetData(query);
   ddlyear.DataSource = dt;
   ddlyear.DataTextField = "year_title";
   ddlyear.DataValueField = "year_id";
   ddlyear.DataBind();
   ddlyear.Items.Insert(0, new ListItem("Select", ""));
  }

 }

 protected void ddlyear_SelectedIndexChanged(object sender, EventArgs e) {
  Chart1.Visible = ddlyear.SelectedValue != "";
  string query = string.Format("SELECT DISTINCT (SELECT COUNT(*) AS Expr1 FROM fee_payments WHERE (fee_remaining = 0) AND (year = '{0}')) AS Fully_Paid, (SELECT COUNT(*) AS Expr1 FROM fee_payments WHERE (fee_remaining = fee_required) AND (year ='{0}')) AS Unpaid, (SELECT COUNT(*) AS Expr1 FROM fee_payments WHERE (fee_remaining > 0) AND (year = '{0}') AND (fee_remaining <> fee_required)) AS Partially_Paid FROM fee_payments AS fee_payments_1", ddlyear.SelectedValue);
  DataTable dt = GetData(query);
  string[] x = new string[dt.Rows.Count];
  int[] y = new int[dt.Rows.Count];
  for (int i = 0; i < dt.Rows.Count; i++) {
   x[i] = dt.Rows[i][0].ToString();
   y[i] = Convert.ToInt32(dt.Rows[i][1]);
  }
  Chart1.Series[0].Points.DataBindXY(x, y);
  //Chart1.Series[0].ChartType = SeriesChartType.Pie;
  Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
  Chart1.Legends[0].Enabled = true;


 }

 private static DataTable GetData(string query) {
  DataTable dt = new DataTable();
  SqlCommand cmd = new SqlCommand(query);
  String constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  SqlConnection con = new SqlConnection(constr);
  SqlDataAdapter sda = new SqlDataAdapter();
  cmd.CommandType = CommandType.Text;
  cmd.Connection = con;
  sda.SelectCommand = cmd;
  sda.Fill(dt);
  return dt;
 }
}

Однако моя круговая диаграмма отображается следующим образом
Введите описание изображения здесь

Это желаемая круговая диаграмма, которую я хочу достичь, как я буду это делать? Любая помощь была бы очень признательна.

Введите описание изображения здесь

1 ответ

  1. В вашей переменной диаграммы, вам нужно будет добавить следующий код, чтобы получить вы хотите.

    chartName.Series[serieName].XValueMember = columnName;
    chartName.Series[serieName].YValueMembers = value;
    chartName.Series[serieName].IsValueShownAsLabel = true;
    

    Например, в вашем случае это будет выглядеть как:

    DataTable dt = GetData(query);
    Chart1.DataSource = dt;
    Chart1.Series.Add("fee");
    Chart1.Series["fee"].ChartType = SeriesChartType.Pie;
    Chart1.Series["fee"].XValueMember = "state";
    Chart1.Series["fee"].YValueMembers = "percent";
    Chart1.Series["fee"].IsValueShownAsLabel = true;
    Chart1.DataBind();
    

    Примечание: обратите внимание на линию, которая была установлена с типом диаграммы, это в основном для обработки различных типов диаграмм с похожими данными, которые будут показаны.
    Привет и благословение.