0

私は汎用レポートツールに取り組んでいます。このツールでは、各レポートがデータベースのレポートテーブルの行で表されます。

レポート行の構造:

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

したがって、レポートパラメータ(名前、タイプ、および値)を取得し、それらをループしてレポートに渡す必要がありますか?

参考:パラメータタイプ:日付または文字列。VS.NET2005が組み込まれたCrystalReportDesignerを使用しています。

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

ループスルーと言うとき、次のDataRowようなことを意味しますか:

DataRow drMyrow = MyTables.Rows[0];

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