Как создать диаграмму со статическими параметрами

Я пытаюсь создать таблицу пончиков для телерика. Проблема в том, что мои значения не соответствуют ожидаемому формату.

Мои данные выглядят так:

{ GoodHours: 120, Downtime: 43.5, PlannedTime: 12.77 }

Кажется, способ построения графиков состоит в том, чтобы ожидать такие данные:

{ 
    Time: 60, Type: "GoodHours",
    Time: 45, Type: "GoodHours",
    Time: 43.5, Type: "Downtime",
    Time: 15, Type: "GoodHours",
    Time: 12.77, Type: "PlannedTime"
}

Причина, по которой мои данные отформатированы таким образом, заключается в том, что они получены из довольно сложной хранимой процедуры, которая сама выполняет агрегацию записей перед отправкой данных в отчет. Гораздо быстрее позволить MsSql подсчитывать цифры, чем получать от Telerik отчеты об этом.

Я понятия не имею, как начать настройку графика.

Я следовал интерактивным инструкциям по созданию кольцевой (круговой) диаграммы, но предполагается, что мои данные еще не переварены. Я пытался добавить несколько Series но они в конечном итоге отображались на разных уровнях, вроде пончиков внутри пончиков.

Как бы я это настроил?

1 ответ

Решение

Сначала напишите свою хранимую процедуру и вызовите ее из своего кода C#.

Создайте сериализуемый объект для хранения ваших данных из SP.

[Serializable()]
public class reportTimeTypeObj
{
    public decimal time { get; set; }
    public string type { get; set; }
}

Затем создайте функцию, которая будет использовать данные и преобразовать их в требуемый формат.

public List<reportTimeTypeObj> getTimeSpentPatientByVisitTypeObj()
{
    //Create a list of objects for your donut.
    reportTimeTypeObj list = new List<reportTimeTypeObj>();

    //Add code to call stored procedure here
    //ds is the data set returned from the stored procedure

    if (ds.Tables.Count > 0)
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            list.Add(new reportTimeSpentPatientByVisitTypeObj()
            {
                time = dr["time "] != DBNull.Value ?
                                Convert.ToDecimal(dr["time "]) : 0,
                type = dr["type "] != DBNull.Value ? 
                            string.IsNullOrEmpty(dr["visit_type"].ToString()) ?
                            "Not recorded" :
                            Convert.ToString(dr["visit_type"]) : "Not recorded"
        });
    }
    return list;
}

Затем создайте компонент ObjectDataSource (ODS) с помощью конструктора отчетов. Назначьте функцию для ODS. Выполните инструкции Как создать круговую диаграмму, чтобы создать диаграмму.

Затем щелкните правой кнопкой мыши на круговой диаграмме. Нажмите "Изменить тип диаграммы...". В показе опций выберите кольцевую диаграмму.

Другие вопросы по тегам