0

我正在开发一个通用报告工具,其中每个报告都由数据库中报告表中的一行表示。

报表行结构:

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

那么,我需要检索报告参数(名称、类型和值)并循环它们以将它们传递给报告吗?

仅供参考:参数类型:日期或字符串。我正在使用嵌入 VS.NET 2005 的 CrystalReport 设计器。

4

2 回答 2

0

好的,所以虽然我不知道你到底要去什么,但我只是给你一个我做了什么的例子,你可以接受也可以离开。

给你一些细节。这是连接到 Access 数据库的示例,但与其他类型数据库的连接在连接字符串中是相似的。查找连接字符串以获取正确的语法。

我还有一个名为 currentDataSet 的强类型 DataSet 和一个定义的表,该表的名称和结构与数据库类型相同。还有其他方法可以做到这一点,但我就是这样做的:

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

就像我说的,如果这些都对你没有帮助,请随意忽略它,你不会伤​​害我的感情 :)

于 2009-02-26T17:43:51.667 回答
0

当您说循环 aDataRow时,您的意思是:

DataRow drMyrow = MyTables.Rows[0];

foreach (DataColumn dc in drMyRow)
{
   //do something with the column
}
于 2009-09-24T21:36:11.337 回答