Посмотрите документацию :
sum (iterable [, start])
Начальные суммы и элементы итерации слева вправо и возвращает общее количество. start по умолчанию -
blockquote>0
. Элементы iterable обычно являются числами, а начальное значение не может быть строкой.Таким образом, вы должны передать итерируемый как аргумент, а не int!
sum((a, b))
должен работать правильно.Это функция, которая предназначена для использования, когда у вас много значений, хранящихся в списке (например), если вы хотите суммировать два значения, вы должен просто использовать
a + b
.
Я не знаю, работало ли это со столбцом DataGridView, но он работает с ComboBoxes:
comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));
и:
MyEnum value = (MyEnum)comboBox1.SelectedValue;
ОБНОВЛЕНИЕ: Это работает со столбцами DataGridView также, просто не забудьте устанавливать тип значения.
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.Name = "My Enum Column";
col.DataSource = Enum.GetValues(typeof(MyEnum));
col.ValueType = typeof(MyEnum);
dataGridView1.Columns.Add(col);
Или, если необходимо сделать некоторую фильтрацию значений перечислителя, можно циклично выполниться до Enum.GetValues(typeof(EnumeratorName))
и добавить тех, Вы хотите использовать:
dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)
Как в стороне, вместо того, чтобы использовать DataTable, можно установить DataSource DataGridView к объекту BindingSource с DataSource набора объекта BindingSource к BindingList<Your Class>
, который Вы заполняете путем передачи IList
в конструктора.
На самом деле, мне было бы интересно знать от любого, если это предпочтительно для использования DataTable в ситуациях, где у Вас уже нет одного (т.е. это возвращается из вызова базы данных).