Come si fa a ciclo attraverso DataRow per recuperare set di colonne correlate cioè (param name, Param Tipo e Param Value)?

StackOverflow https://stackoverflow.com/questions/586244

  •  06-09-2019
  •  | 
  •  

Domanda

Sto lavorando su un generico strumento di report, in cui ogni rapporto è rappresentato da una riga nella tabella di report nel database.

Struttura relazione riga:

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

Così, ho bisogno di recuperare i parametri del report (nome, tipo, e valore) e ciclo attraverso di loro per passare a segnalare?

FYI: Parametro Tipo: data o String.      Sto usando CrystalReport progettista embedded con VS.NET 2005.

È stato utile?

Soluzione

Va bene, così mentre io non so esattamente quello che ci si sta muovendo per, mi limiterò a dare un esempio di quello che ho fatto e si può prendere o lasciare.

A pochi dettagli per voi. Questo è un esempio di connessione a un Access Banca dati, ma le connessioni ad altri tipi di database sono simili nelle loro stringhe di connessione. Look up stringhe di connessione per la sintassi corretta.

Ho anche un DataSet fortemente tipizzato chiamato currentDataSet e una tabella definita che prende il nome la stessa e strutturato lo stesso del tipo di database. Ci sono altri modi di realizzare questo, ma questo è il modo in cui l'ho fatto:

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

Da lì è possibile manipolare i dati all'interno del set di dati. Anche in questo caso ecco un esempio:

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

Da questo punto è ora possibile aggiornare i dati nel database con il seguente codice:

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

Come ho detto, se tutto questo non ti aiuta, sentitevi liberi di non tenerne conto, non farà male i miei sentimenti:)

Altri suggerimenti

Quando si dice ciclo attraverso un DataRow vuoi dire qualcosa come:

DataRow drMyrow = MyTables.Rows[0];

foreach (DataColumn dc in drMyRow)
{
   //do something with the column
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top