Что вы могли бы сделать:
- Получить данные из базы данных в таблицу данных
- Выберите две строки для Rate и Total из результата
- (Есливам не нужно отображать их, удалите эти строки из таблицы)
- Выполните вычисления на основе значений в двух строках
- Добавьте новую строку в таблицу для результатов вручную
РЕДАКТИРОВАТЬ
Возможно, я не полностью понял вашу структуру данных.Итак, давайте посмотрим на некоторые сценарии.Если вас там нет, пожалуйста, предоставьте более подробную информацию о том, как на самом деле выглядит одна строка в вашей таблице данных:
Случай a : данные хранятся в столбцах, вам нужны итоги иКоличество столбцов в этой строке тоже
Value1 Value2 Value3 Rate Total Amount
1 5 3 10 ? ?
Вы можете адаптировать свой оператор SQL следующим образом:
SELECT Value1, Value2, Value3, Rate,
(Value1+Value2+Value3) AS Total,
((Value1+Value2+Value3) * Rate) AS Amount
FROM <table>
В качестве альтернативы, если вы используете типизированный набор данных в C #, вы можете использоватьобычный оператор SELECT * ...
и добавление столбцов с соответствующими выражениями (свойство Expression
- эквивалент вычисляемых столбцов) вручную в таблицу в наборе типизированных данных.
Случай b : данныехранящиеся в строках, вы также хотите, чтобы Total и Amount были строками
RowTitle Value
Value1 1
Value2 5
Value3 2
Rate 10
Теперь вам нужно использовать цикл for в C #, чтобы перебрать все строки, суммировать значения и затем создать два новыхстроки с RowTitle
«Итого» и «Сумма» и добавьте их в свою таблицу.
РЕДАКТИРОВАТЬ 2
Вы, так что я понимаю из вашего второго комментария, что у вас на самом деле есть дватаблицы в вашей базе данных.Тот, который содержит фактические данные, и тот, который содержит цены.Теперь вы выбираете из этих таблиц в соответствии с заданными пользователем настройками и фактически получаете две таблицы в своем наборе данных на C # - одну для этих данных, одну для скорости.
AFAIK, SQL Server Compact Edition не позволяет вамиспользовать JOIN
, но это было бы проще всего: выберите данные из таблицы данных и присоедините их к таблице «Тарифы», выбрав соответствующую скорость в соответствии с настройками пользователя.Тогда вы могли бы сделать расчет, который я отметил в «Случае а» выше.
Однако я думаю, что вы не можете использовать JOIN
, поэтому я бы посоветовал вам получить данные в ваше приложение (в результате дваотдельные таблицы, одна для данных, одна для курса).Вы модифицируете оператор данных SELECT
, чтобы получить дополнительный столбец Amount
со значением по умолчанию 0
.
SELECT *, 0 AS Amount FROM <data table>
Затем в C # вы перебираете все записи в вашей таблице данных и вычисляетезначение Amount
для записи.
private void GetData(...)
{
// Call SELECT statements to fill a dataset with two tables
DataSet set = new DataSet();
....
// set now contains tables[0] (for the data) and tables[1] (for the Rate).
// Get the Rate
int rate = (int)set.Tables[1].Rows[0]["Rate"]; // Assuming that the column is named "Rate"
// Now iterate over all data rows and calculate amount
foreach (DataRow row in set.Tables[0])
{
row["Amount"] = ((int)row["Total"] * rate);
}
// Mark the data set as unmodified
set.AcceptChanges();
}
Обратите внимание, что этот код может нуждаться в некоторой настройке - на самом деле я его не проверял.Если таблица «Rates» содержит более одной строки и необходимо выбрать правильную скорость в зависимости от других настроек, вы можете рассмотреть возможность создания функции, которая возвращает правильную строку в зависимости от этих настроек:
private DataRow FindRateRow(DataSet set, <parameters for selecting the correct row>)
{
DataRow[] row = set.Tables[1].Select(<Filter string according to parameters>);
if (row != null && row.Length > 0)
return row[0];
return null;
}
Используйте int rate = (int)FindRateRow(set, ...)["Rate"];
выше.