0

ASP.NET (C#) でドリルダウン チャート (スタック列) を作成しようとしています。これは、年 (2011、2012、2013 など) ごとの総収益を示します。列をクリックすると、2012 年と言えます。グラフには、その年の各月の総収益が表示されます。これは毎月同じです。

これがアイデアですが、このようなものを作成する方法がわかりません。ドリルダウンの例を見つけるために何日も検索しましたが、何もうまくいきませんでした。いくつかの例がありますが、日付のドリルダウンではありません。

これは私がすでに得たものですが、それ以上はどうですか?

データベース テーブルの定義:
RevenueNumbers: int
Date: Date

(SQL サーバーからグラフを作成して塗りつぶす)

public SqlConnection conn;

    protected void Page_Load(object sender, EventArgs e)
    {
        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString);

        string query = "SELECT SUM(RevenueNumber) AS TotalRevenue, DATENAME(YYYY, Date) AS Year FROM test GROUP BY DATENAME(YYYY, Date)";
        SqlCommand cmd = new SqlCommand(query, conn);
        conn.Open();

        Chart1.DataSource = cmd.ExecuteReader();
        Series Series1 = new Series();
        Series1.XValueMember = "Year";
        Series1.YValueMembers = "TotalRevenue";

        Chart1.Series.Add(Series1);
        Chart1.Series[0].PostBackValue = "#XVAL";
        Chart1.Series[0].ChartType = SeriesChartType.Column;
        Chart1.DataBind();

    }

(HTML)

<div>  
    <asp:Chart ID="Chart1" runat="server">
        <chartareas>
            <asp:ChartArea Name="ChartArea1">
            </asp:ChartArea>
        </chartareas>
    </asp:Chart>
</div>
4

2 に答える 2

1

いくつかのコードを作成しました。動作していますが、少し面倒です

        protected void Page_Load(object sender, EventArgs e)
    {
        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString);
        string query = "";
        string Year = "";
        string Month = "";
        if (Request["Year"] != null) Year = Request["Year"].ToString();
        if (Request["Month"] != null) Month = Request["Month"].ToString();
        if ((Year == "") && (Month == ""))
        {
            query = "SELECT SUM(TotalRevenue) AS Total, YEAR(Date) AS Year FROM test GROUP BY YEAR(Date)";
        }
        else if (Month == "")
        {
            query = "SELECT SUM(TotalRevenue) AS Total, MONTH(Date) AS year FROM test WHERE YEAR(Date) = " + Year + "  GROUP BY MONTH(Date)";
        }
        else
        {
            query = "SELECT SUM(TotalRevenue) AS Total, DAY(Date) AS Year FROM test WHERE YEAR(Date) = " + Year + " AND MONTH(Date) = " + Month + "  GROUP BY DAY(Date)";
        }

        SqlCommand cmd = new SqlCommand(query, conn);
        conn.Open();

        Chart1.DataSource = cmd.ExecuteReader();
        Series Series1 = new Series();
        Series1.XValueMember = "Year";
        Series1.YValueMembers = "Total";

        Chart1.Series.Add(Series1);

        Chart1.Series[0].ChartType = SeriesChartType.Column;
        Chart1.DataBind();

        foreach (DataPoint p in Chart1.Series[0].Points)
        {
            if ((Year != "") && (Month != ""))
            {
                p.Url = string.Format("Default.aspx");
            }
            else if (Year != "")
            {
                p.Url = string.Format("Default.aspx?Year={0}&Month={1}", Year, p.XValue);
            }
            else
            {
                p.Url = string.Format("Default.aspx?Year={0}", p.XValue);
            }
        }

    }
于 2013-10-07T07:39:55.263 に答える
0

シリーズのポイント コレクションをループし、URL を設定します。

foreach (DataPoint p in Chart1.Series[0].Points)
{
    p.Url = string.Format("details.aspx?id={0}", p.XValue);
}

それはあなたを四角くするはずです。

于 2013-10-04T12:22:12.093 に答える