Как выполнить цикл через DataRow для получения набора связанных столбцов, то есть (имя параметра, тип параметра и значение параметра)?
Я работаю над универсальным инструментом отчетности, где каждый отчет представлен строкой в таблице отчетов в базе данных.
Структура строки отчета:
ReportID ReportFileName
RepParam1Name RepParam1Type RepParam1Value
RepParam2Name RepParam2Type RepParam2Value ... RepParam10
Итак, мне нужно получить параметры отчета (имя, тип и значение) и перебрать их, чтобы передать их в отчет?
К сведению: Тип параметра: Дата или Строка. Я использую конструктор CrystalReport, встроенный в VS.NET 2005.
Ответов (2)2
Хорошо, хотя я точно не знаю, к чему вы идете, я просто приведу вам пример того, что я сделал, и вы можете принять это или оставить.
Несколько деталей для вас. Это пример подключения к базе данных Access, но подключения к другим типам баз данных аналогичны по строкам подключения. Найдите в строках подключения правильный синтаксис.
У меня также есть строго типизированный DataSet, называемый currentDataSet, и определенная таблица, названная так же и структурированная так же, как и тип базы данных. Есть и другие способы сделать это, но я сделал это так:
string conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sourceString;
string strSql1 = "SELECT * FROM ReportTable";
OleDbConnection con = new OleDbConnection(conString);
con.Open();
OleDbDataAdapter dAdapter = new OleDbDataAdapter();
dAdapter.SelectCommand = new OleDbCommand(strSql1, con);
dAdapter.Fill(currentDataSet, "ReportTable");
con.Close();
Оттуда вы можете управлять данными внутри набора данных. Опять же, пример:
int reportTableCount = currentDataSet.ReportTable.Count();
int reportTableCounter = 0;
while (reportTableCounter < reportTableCount)
{
if (currentDataSet.ReportTable[reportTableCounter].RepParam1Value == "Bad data")
{
currentDataSet.ReportTable[reportTableCounter].RepParam1Value = "Good data";
}
reportTableCounter = reportTableCounter + 1;
}
С этого момента вы можете обновить данные в базе данных с помощью следующего кода:
con.Open();
dAdapter.SelectCommand = new OleDbCommand(strSql1, con);
OleDbCommandBuilder objCommandBuilder = new OleDbCommandBuilder(dAdapter);
dAdapter.Update(currentDataSet, "ReportTable");
con.Close();
Как я уже сказал, если ничего из этого вам не поможет, не обращайте на это внимания, вы не обидите меня :)