首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

實戰:LINQ to SQL + Microsoft Chart 控制項打造教學回饋雷達圖

     編輯:關於.NET

業務場景

MIS 系統中常見需求:多指標實測值與預期值對比。以教學問卷回饋為例,需直觀呈現各項指標得分與差距。

原始表格報表

雷達圖優勢

雷達圖 (Radar/Spider Chart) 將多維指標投影於同一圓形坐標系,管理者可一目了然:

  • 各指標絕對表現
  • 與預期值/基準值差距
  • 整體能力輪廓強弱項

雷達圖效果

資料模型設計 (反正規化優化查詢)

CDM 概念模型

PDM 物理模型

  • EvaluateBill:問卷主檔
  • EvaluateBill_Answer:填答記錄
  • EvaluateBill_AnswerDetail:明細 (冗餘指標描述,避免多表 Join)

LINQ to SQL 配置式開發流程

sqlmetal /conn:"server=.;db=ZXKP;uid=sa;pwd=1" /dbml:ZXKP.dbml /namespace:DMN /serialization:Unidirectional

實體類別圖

核心查詢與圖表繫結程式碼

// 1. 取得專案經理代碼與問卷編號
string pmCode = ddlPM.SelectedValue.Split('|')[0];
string no = ddlPM.SelectedValue.Split('|')[1];

// 2. LINQ 查詢:分組計算各指標平均分
var q = from d in ctx.EvaluateBill_AnswerDetail
        where d.EvaluateBill_Answer.EvaluateBill.NO == no
           && d.EvaluateBill_Answer.EvaluateBill.PMCode == int.Parse(pmCode)
        group d by d.Describe into g
        select new
        {
            Indicator = g.Key.Length > 10 ? g.Key.Substring(0,10) + "..." : g.Key,
            AvgScore = g.Average(x => x.Score)
        };

// 3. 繫結 Chart 控制項
List xVals = new List();
List yVals = new List();
foreach (var item in q)
{
    xVals.Add(item.Indicator);
    yVals.Add(Math.Round(item.AvgScore.Value, 1));
}

Chart1.Series["Series1"].Points.DataBindXY(xVals, yVals);

// 4. 雷達圖樣式微調
Chart1.Series["Series1"]["RadarDrawingStyle"] = "Area";
Chart1.Series["Series1"]["AreaDrawingStyle"] = "Circle";
Chart1.Series["Series1"]["CircularLabelsStyle"] = "Horizontal";
Chart1.Series["Series1"].BorderColor = Color.FromArgb(100, 100, 100);
Chart1.Series["Series1"].BorderWidth = 1;

技術亮點總結

  1. LINQ 查詢語法貼近業務語言:group by ... into g select new { ... } 直接表達「各指標平均分」
  2. 反正規化設計:明細表冗餘 Describe 欄位,單表查詢無需 Join,效能最佳
  3. Microsoft Chart 免費強大:.NET 3.5 內建,支援 30+ 圖表類型,可惜缺 Data Drill-down
  4. 配置式開發:DBML + 外部映射,資料庫微調只需重跑 sqlmetal
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved