private void LL_DefineVariables(object sender, DefineElementsEventArgs e)
{
// Alle Werte übergeben
foreach (DataColumn col
in _Values.Columns)
{
string n = col.ColumnName;
object v = GetValue(_Values.Rows[0], n);
LL.Variables.Add(n, v);
}
e.IsLastRecord = false;
TableIndex = -1;
RowIndex = -1;
// Erste Zeile in den Tabellen finden
for (int i = 0; i < _Tables.Count && RowIndex == -1; i++)
{
if (_Tables[i].Rows.Count
> 0)
{
TableIndex = i;
RowIndex = 0;
break;
}
}
}
private void LL_DefineFields(object sender, DefineElementsEventArgs e)
{
//
Wenn alle Tabellen leer sind, dann eine Zeile mit Dummywerten übergeben
if (RowIndex ==
-1)
{
LL.Fields.Add("TableName", "");
for (int i = 0; i
< _Tables.Count; i++)
{
foreach (DataColumn col in
_Tables[i].Columns)
{
&nb
sp; string n = _Tables[i].TableName + "_" + col.ColumnName;
&nb
sp; object v = GetNullValue(Tables[i], col.ColumnName);
&nb
sp; LL.Fields.Add(n, v);
}
}
e.IsLastRecord = true;
}
else
{
// Alle Spalten aller Tabellen übergeben
LL.Fields.Add("TableName", _Tables
[TableIndex].TableName);
for (int i = 0; i <
_Tables.Count; i++)
{
foreach (DataColumn col in
_Tables[i].Columns)
{
&nb
sp; string n;
&nb
sp; object v;
&nb
sp; if (i == TableIndex)
&nb
sp; {
&n
bsp; // von der aktuellen Tabelle die Werte übergeben
&n
bsp; n = _Tables[i].TableName + "_" + col.ColumnName;
&nb
sp; v = GetValue(_Tables[i].Rows[RowIndex], col.ColumnName);
&nb
sp; }
&nb
sp; else
&nb
sp; {
&nb
sp; // von allen anderen Dummywerte
&nb
sp; n = _Tables[i].TableName + "_" + col.ColumnName;
&nb
sp; v = GetNullValue(_Tables[i], col.ColumnName);
&nb
sp; }
&nb
sp; LL.Fields.Add(n, v);
}
}
}
// Nächste Zeile suchen
RowIndex += 1;
if (RowIndex < _Tables[TableIndex].Rows.Count)
{
// keine Zeile mahr
e.IsLastRecord = false;
}
else
{
// nächste Zeile suchen
RowIndex = 0;
do
{
TableIndex += 1;
}
while (TableIndex < _Tables.Count && _Tables
[TableIndex].Rows.Count == 0);
// wurde eine Zeile
gefunden
e.IsLastRecord = !(TableIndex <
Tables.Count);
}
}
private object GetValue(DataRow row, string col)
{
if (!row.IsNull(col))
return row[col];
if (row.Table.Columns[col].DataType == typeof(string)) return
"";
if (row.Table.Columns[col].DataType == typeof(int)) return 0;
if (row.Table.Columns[col].DataType == typeof(double)) return 0;
if (row.Table.Columns[col].DataType == typeof(bool)) return false;
if (row.Table.Columns[col].DataType == typeof(DateTime)) return new DateTime(>1, 1, 1);
return row.Table.Columns[col].DataType.ToString();
}
private object
GetNullValue(DataTable tab, string col)
{
if (tab.Columns[col].DataType ==
typeof(string)) return "";
if (tab.Columns[col].DataType == typeof(int)) return 0;
if (tab.Columns[col].DataType == typeof(double)) return >0;
if (tab.Columns[col].DataType == typeof(bool)) return false;
if (tab.Columns[col].DataType == typeof(DateTime)) return new DateTime(1, 1, 1);
return tab.Columns[col].DataType.ToString();
}