2013-08-06 4 views
0

Я пытаюсь суммировать столбец «зарплата». Ниже мой стол.Подведение итогов столбца

public static void dataTable() 
{ 
DataTable table = GetTable(); 
} 
static DataTable table; 
public static DataTable GetTable() 
{ 
table = new DataTable(); 
table.Columns.Add("player", typeof(string)); 
table.Columns.Add("age", typeof(double)); 
table.Columns.Add("position", typeof(stats.pos)); 
table.Columns.Add("ovalue", typeof(double)); 
table.Columns.Add("dvalue", typeof(double)); 
table.Columns.Add("team", typeof(stats.team)); 
table.Columns.Add("salary", typeof(int)); 
table.Columns.Add("contractYears", typeof(int)); 
table.Columns.Add("active", typeof(bool)); 

table.Rows.Add("AG", 24, stats.pos.SP, 0, 4.2, stats.team.S, 1, 5, true); 
table.Rows.Add("AR", 30, stats.pos.SP, 0, 2.6, stats.team.S, 7, 2, true); 
table.Rows.Add("JK", 22, stats.pos.SP, 0, 3.2, stats.team.S, 1, 6, true); 
} 
public class stats 
{ 
public enum pos { fiB, seB, SS, thB, OF, C, DH, SP, RP }; 
public enum team { S }; 
} 

Вот моя попытка добавления столбца заработной платы:

try 
{ 
    object sumobject = (object)table.Compute("Sum(salary)", "active=true"); 
    double sumdouble = Convert.ToDouble(sumobject); 
    payrollLabel.Text = Convert.ToString(sumdouble); 
} 
catch 
{ 
    MessageBox.Show("Error in payroll"); 
}   

Однако код всегда переходит к улову. В нем говорится, что в моем столбце есть нулевое значение, но я ничего не вводил. Любая помощь будет принята с благодарностью.

+0

Денежное поле как 'int'? – DontVoteMeDown

+0

Можете ли вы указать конкретную ошибку (скопировать/вставить ее)? – BlargleMonster

+0

столбец зарплаты удваивается – user2548227

ответ

1

Я довольно уверен, что это как-то связано с e stats.pos или stats.team. Я удалил ссылки, и все работает отлично. Что у вас есть в stats объект?

Подождите ... Вы инициализируете стол перед его доступом?

+0

Статистика - это класс для хранения этих перечислений. – user2548227

+0

public enum pos {fiB, seB, SS, thB, OF, C, DH, SP, RP}; общественная команда enum {S}; – user2548227

+0

@ user2548227 Где вы называете себя статическим методом dataTable()? Это до блока try? – Siva

1

вы можете сделать это

yourtable.AsEnumerable().Sum(datarow => datarow.Field<int>("salary")); 
2

Вы могли бы упростить его с помощью LINQ:

поле в междунар:

var salarySum = table.AsEnumerable().Sum(x => x.Field<int>("salary"));  

Как дважды:

var salarySum = table.AsEnumerable().Sum(x => x.Field<double>("salary"));