2009-02-25 1 views
0

Я работаю над универсальным инструментом отчетности, где каждый отчет представлен рядом с таблицей отчетов в базе данных.Как выполнить цикл через DataRow для извлечения набора связанных столбцов i.e (имя параметра, тип параметра и значение параметра)?

Структура отчета ряд:

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

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

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

+0

Я предполагаю, что я в замешательстве, вам нужно найти, какой тип каждого поля? Или вы пытаетесь каким-то образом манипулировать данными из базы данных? – Matt

+0

Манипулирование данными из базы данных. – Ahmed

ответ

0

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

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

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

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

0

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

DataRow drMyrow = MyTables.Rows[0]; 

foreach (DataColumn dc in drMyRow) 
{ 
    //do something with the column 
} 
Смежные вопросы