どのようにDataRowを通じ一つのループは、すなわち(パラメータ名、Paramのタイプ、およびParamの値)に関連する一連の列を取得するのですか?
質問
私は、各レポートはデータベースにレポートテーブルの行で表される一般的なレポートツール、に取り組んでいます。
レポート行構造:
ReportID ReportFileName
RepParam1Name RepParam1Type RepParam1Value
RepParam2Name RepParam2Type RepParam2Value ... RepParam10
だから、私は報告してそれらを渡すためにそれらを介してレポートのパラメータ(名前、タイプ、および値)とループを取得する必要がありますか?
FYI:パラメータ型:日付または文字列。 I
VS.NET 2005で埋め込まれたCrystalReportデザイナーを使用しています解決
さて、私はあなたが向かっている内容を正確に把握していないが、私はあなたに私が何をしたかの例をあげますと、あなたはそれを取るか、それを残すことができるようにます。
あなたのためのいくつかの詳細。これは、Access Databseへの接続の一例ですが、データベースの他の種類の接続は、接続文字列に似ています。正しい構文の接続文字列を検索します。
私も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();
私が言ったように、これのどれもあなたが、それを無視して自由に感じることができますしない場合、あなたは私の気持ちを傷つけることはありません。)
他のヒント
:あなたは
DataRow
をループを言うときあなたのような何かを意味しています
DataRow drMyrow = MyTables.Rows[0];
foreach (DataColumn dc in drMyRow)
{
//do something with the column
}
所属していません StackOverflow