Как выполнить цикл по DataRow для получения набора связанных столбцов, т. Е. (Имя параметра, Тип параметра и Значение параметра)? - PullRequest
0 голосов
/ 25 февраля 2009

Я работаю над универсальным инструментом отчетности, где каждый отчет представлен строкой в ​​таблице отчетов в базе данных.

Структура строки отчета:

ReportID          ReportFileName  
RepParam1Name     RepParam1Type      RepParam1Value 
RepParam2Name     RepParam2Type      RepParam2Value   ... RepParam10

Итак, мне нужно получить параметры отчета (имя, тип и значение) и просмотреть их для передачи в отчет?

FYI: Тип параметра: Дата или Строка. Я использую конструктор CrystalReport, встроенный в VS.NET 2005.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2009

Когда вы говорите цикл через DataRow, вы имеете в виду что-то вроде:

DataRow drMyrow = MyTables.Rows[0];

foreach (DataColumn dc in drMyRow)
{
   //do something with the column
}
0 голосов
/ 26 февраля 2009

Хорошо, так что, хотя я не знаю точно, к чему вы клоните, я просто приведу вам пример того, что я сделал, и вы можете взять это или оставить.

Несколько подробностей для вас. Это пример подключения к базе данных доступа, но подключения к другим типам баз данных похожи в своих строках подключения. Найдите строки подключения для правильного синтаксиса.

У меня также есть строго типизированный 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();

Как я уже сказал, если ничего из этого не поможет вам, не стесняйтесь игнорировать это, вы не обидите мои чувства :)

...