2009-02-25 9 views
0

Je travaille sur un Générique Reporting Tool, où chaque rapport est représenté par une ligne dans la table Reports dans la base de données.Comment faire une boucle dans DataRow pour récupérer un ensemble de colonnes connexes i.e (Nom du paramètre, Type de paramètre et Valeur du paramètre)?

Structure du rapport de la ligne:

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

Alors, je dois récupérer les paramètres du rapport (Nom, type et valeur) et la boucle à travers eux de les transmettre à signaler?

FYI: Type de paramètre: Date ou Chaîne. J'utilise le concepteur CrystalReport incorporé avec VS.NET 2005.

+0

Je suppose que je suis confus, avez-vous besoin de trouver quel type de type chaque champ est? Ou essayez-vous de manipuler les données de la base de données d'une manière ou d'une autre? – Matt

+0

Manipulation des données thr à partir de la base de données. – Ahmed

Répondre

0

Bon, même si je ne sais pas exactement ce que vous allez faire, je vais vous donner un exemple de ce que j'ai fait et vous pouvez le prendre ou laisse-le.

Quelques détails pour vous. Ceci est un exemple de connexion à un Access Databse, mais les connexions à d'autres types de bases de données sont similaires dans leurs chaînes de connexion. Recherchez les chaînes de connexion pour la syntaxe correcte.

J'ai aussi un DataSet fortement typé appelé currentDataSet et une table définie qui est nommée la même et structurée de la même manière que le type de base de données. Il existe d'autres moyens d'y parvenir, mais cela est la façon dont je l'ai fait:

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(); 

De là, vous pouvez manipuler les données à l'intérieur de l'ensemble de données. Encore une fois voici un exemple:

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; 
} 

A partir de ce stade, vous pouvez maintenant mettre à jour les données dans la base de données avec le code suivant:

con.Open(); 
dAdapter.SelectCommand = new OleDbCommand(strSql1, con); 
OleDbCommandBuilder objCommandBuilder = new OleDbCommandBuilder(dAdapter); 
dAdapter.Update(currentDataSet, "ReportTable"); 
con.Close(); 

Comme je l'ai dit, si rien de tout cela vous aide, ne hésitez pas de ne pas tenir compte, vous ne me blesser :)

0

Quand vous dites boucle à travers une DataRow voulez-vous dire sommething comme:

DataRow drMyrow = MyTables.Rows[0]; 

foreach (DataColumn dc in drMyRow) 
{ 
    //do something with the column 
} 
Questions connexes