Я пишу калькулятор молярной массы, который будет отображать информацию о химической формуле, переданной пользователем, такую как атомы c число элементов, их символы, а также их точки кипения и плавления, среди прочего ,
Информация отображается в DataGridView
, который имеет DataTable
в качестве DataSource
. Я также создал класс под названием Элемент, который, что неудивительно, представляет Элемент. Он просто содержит набор строковых свойств для представления информации об элементе, таких как номер атома c, точка кипения и т. Д. c.
Файл CSV, из которого я извлек информацию об элементе, имеет некоторую пустоту записи, потому что не все известно о каждом элементе. Я заменил записи словом «неизвестно», что объясняет, почему каждое свойство в классе Element является строкой.
В настоящее время для столбцов, требующих нестрочной сортировки, я использую LINQ для Закажите коллекцию, которая строит DataTable
. Например:
private void SortByAtomicMass()
{
var elementsByAtomicMass = (from el in Elements
orderby float.Parse(el.Mass)
select new
{
el.Name,
el.AtomicNumber,
el.Symbol,
el.Mass,
el.CPKHexColor,
el.Electronegativity,
el.State,
el.BondingType,
el.MeltingPoint,
el.BoilingPoint,
el.GroupBlock,
el.YearDiscovered
}).ToList<dynamic>();
GenerateNewDataTable(elementsByAtomicMass);
}
Это работает так, как задумано - сортирует столбец массы атома c, как и следовало ожидать. Я попробовал такой же подход для сортировки столбцов с точками плавления:
private void SortByMeltingPoint()
{
var elementsByMeltingPoint = (from el in Elements
orderby float.TryParse(el.MeltingPoint, out _)
select new
{
el.Name,
el.AtomicNumber,
el.Symbol,
el.Mass,
el.CPKHexColor,
el.Electronegativity,
el.State,
el.BondingType,
el.MeltingPoint,
el.BoilingPoint,
el.GroupBlock,
el.YearDiscovered
}).ToList<dynamic>();
GenerateNewDataTable(elementsByMeltingPoint);
}
Это терпит неудачу и упорядочивает, казалось бы, случайным образом. Как я могу это исправить, оставаясь в сфере подхода LINQ? Я пытаюсь улучшить свои навыки в этой области.