我正在用大量数据实现Telerik Chart.图表x轴上的标签重叠.我已经克服了这个问题,但从长远来看它并不可靠.
这些是List列出的字段:
FieldName DataType
Date DATETIME
DateString STRING
Unit DOUBLE
Price DOUBLE
Run Code Online (Sandbox Code Playgroud)
X轴标签值来自DateString现场
解决方案我实施了
DateString字段将始终返回.这是代码 -
// Get min and max Date
DateTime minDate = DateTime.Now;
DateTime maxDate = DateTime.Now;
if (dtGas.Rows.Count > 0)
{
minDate = Convert.ToDateTime(dtGas.Compute("MIN([Date])", ""));
maxDate = Convert.ToDateTime(dtGas.Compute("MAX([Date])", ""));
}
// Group by 'Date' and 'DateString' | 'SUM' of Unit and 'Price'
var qGas = from x in dtGas.AsEnumerable()
group x by new
{
Date = x.Field<DateTime>("Date"),
DateString = x.Field<string>("DateString")
} into egroup
let isOne = egroup.Key.Date.DayOfWeek.ToString() == "Monday"
select new
{
Date = egroup.Key.Date,
DateString = minDate == egroup.Key.Date ?
(
egroup.Key.DateString
) :
(
maxDate == egroup.Key.Date ?
(
egroup.Key.DateString
) :
(
(isOne) ?
(
egroup.Key.DateString
) :
(" ")
)
),
Unit = egroup.Sum(r => r.Field<double>("Unit")),
Price = egroup.Sum(r => r.Field<double>("Price")),
};
Run Code Online (Sandbox Code Playgroud)
此解决方案有助于返回所有值,而不是其中一些值.因此避免重叠.但是随着数据的增长,即使这个解决方案也会失败.
解决方案我需要实现
我在思考但不知道如何实施的想法是 -
DateString字段将始终返回.[与我现在正在做的相同]因此,例如,如果在列表I中有32个值.它应该在DateString字段中返回10个值,其余的将是空字符串.
我建议这样的事情:
public static IList<Stock> GetSome(this IList<Stock> input)
{
var result = new List<Stock>();
if (input.Count < 8)
{
return input;
}
else
{
var i = 0;
for (; i < input.Count; ++i)
{
if (i % 8 == 0)
{
result.Add(input[i]);
}
}
if (i % 8 != 0)
{
result.Add(input.Last());
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
如果股票不按时间顺序排列,我会按日期调用 .Sort() 。
您可能希望在代码中添加 null 和空集合检查。
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |