Опитвам се динамично да създам стълбовидна диаграма в C# въз основа на следната таблица с данни (която ще се промени, следователно необходимостта от динамично създаване).
Ето таблиците с данни, от които чета в момента: (хора на бъдещето: тези изображения съдържаха работни неща и не искам да бъда уволнен, затова ги премахнах =O )
Горната таблица е мястото, където добавям данните от серията (s24, s26, s27). Втората таблица е мястото, където я намалявам и добавям серията „Общо“.
И така, ето колоните, от които се опитвам да направя диаграма:
Конфигурация - това е мястото, където искам да получа моите индивидуални серии: т.е.: s24, s26, s27 и т.н. HRC_Count - това е действителната стойност, която се опитвам да изобразя в графика HRC_Description и HRC - това са етикети за Y оста Total_HRC_Count - това е за моята серия "Общо" (черна лента на диаграмата)
//get distinct Configs (to be added as Series in chart)
//this creates a dataview to parse for the series in the chart
DataView view = new DataView(dt);
DataTable distinctValues = new DataTable();
distinctValues = view.ToTable(true, "Config");
DataView dv = new DataView(distinctValues);
dv.Sort = "Config ASC";
DataTable dt_temp = new DataTable();
dt_temp = dv.ToTable();
distinctValues = dt_temp;
GraphDataNew(distinctValues);
след това извиквам GraphDataNew и анализирам изгледа на данни за серията:
private void GraphDataNew(DataTable dt_distinct)
{
chart_new.Series.Clear();
foreach (DataRow row in dt_distinct.Rows)
{
string s = row["Config"].ToString();
chart_new.Series.Add(s);
chart_new.Series[s].ChartType = SeriesChartType.Bar;
chart_new.Series[s].IsValueShownAsLabel = true;
chart_new.Series[s].Sort(PointSortOrder.Ascending, "X");
chart_new.Series[s].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.String;
chart_new.Series[s].YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
}
И така, сега имам настроена серия (конфигурации), сега добавям действителни данни:
DataView dv = new DataView(dt);
dv.Sort = "HRC_Description ASC, Config ASC"; // sort by description first, then config second
string HRC_Description = "";
string Config = "";
double HRC_Count = 0;
DataTable dt_temp = new DataTable();
dt_temp = dv.ToTable();
// add actual data
//loop through dt_temp and add datapoints and custom labels to chart
for (int x = 0; x < dt_temp.Rows.Count; x++)
{
HRC_Description = (dt_temp.Rows[x]["HRC_Description"].ToString().Trim());
Config = dt_temp.Rows[x]["Config"].ToString().Trim();
HRC_Count = Double.Parse(dt_temp.Rows[x]["HRC_Count"].ToString().Trim());
chart_new.Series[Config].Points.AddXY(HRC_Description, HRC_Count);
int y = chart_new.Series[Config].Points.Count;
chart_new.Series[Config].Points[y - 1].AxisLabel = HRC_Description;
}
След това добавям лентата на серията „Общо“:
if (1==1) // fake condition for this question
{
chart_new.Series.Add("Total");
chart_new.Series["Total"].ChartType = SeriesChartType.Bar;
chart_new.Series["Total"].Color = Color.Black;
chart_new.Series["Total"].IsValueShownAsLabel = true;
chart_new.Series["Total"].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.String;
chart_new.Series["Total"].YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
DataView view1 = new DataView(dt_temp);
DataTable distinctValues1 = view1.ToTable(true, "HRC_Description", "Total_HRC_Count");
dt_temp = distinctValues1;
double Total_HRC_Count = 0;
for (int x = 0; x < dt_temp.Rows.Count; x++)
{
HRC_Description = (dt_temp.Rows[x]["HRC_Description"].ToString().Trim());
Total_HRC_Count = Double.Parse(dt_temp.Rows[x]["Total_HRC_Count"].ToString().Trim());
chart_new.Series["Total"].Points.AddXY(HRC_Description, Total_HRC_Count);
}
}
Ето как изглежда диаграмата: [![Примерна диаграма][2]][2]
Въпреки това, както можете да видите в приложената диаграма, всички мои данни са изключени. Има 10 от HRC_Description, но само 9 се показват, а едно се повтаря. Освен това изглежда, че когато имам повече от 2 серии, данните се смесват. Някой има ли съвети какво мога да направя, за да поправя това? Побърква ме! Благодаря!!