Datatable Fr Net
Добрый день. Есть необходимость использовать FR, но вызвать из приложения можно только COM обьект. В демо есть пример обертки для отчетника. Мне хотелось бы понять и реализовать наполнение источника DataTable для отчета динамически. Так как на моент построения отчета, не известно сколько будет столбцов в отчете. Для каждого метода в FR создает интерфейс вызова.
создание DataSet
void CreateDataTable(string tName)
public void CreateDataTable(string tName)
{
FDataSet = new DataSet();
FDataTable = new DataTable();
m_tName = tName;
FDataTable.TableName = tName;
FDataSet.Tables.Add(FDataTable);
FDataSet.Clear();
}
// Создание колонок
public void CreateColumns(int cId) // в методе указываем необходимое кол-во столбцов
{
for (Int32 i = 1; i <= cId; i++)
{
FDataTable.Columns.Add("col" + i, typeof(string));
}
columnCount = FDataTable.Columns.Count;
rowArray = new object[columnCount];
report.RegisterData(FDataSet);
report.GetDataSource(m_tName).Enabled = true;
}
// заполнение данными
public void AddRows(int RowId, string glValue)
{
try
{
rowArray[RowId] = glValue;
tempRow = FDataTable.NewRow();
tempRow.ItemArray = rowArray;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
Ну и последний метод, который заполняет мой DataSET
// Вставка масива колонок в DataTable
public void ArrayRows()
{
try
{
FDataTable.Rows.Add(tempRow);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
И тут самое интересное, если заполняется где то пустым значением
Пример: 1..7 колонки
1 2 3 4 5 6 7
A B C D E
B C G T T U
V H T U
для второй и третьей строки продублируются записи со строки 1 в колоке 3. а дя 3-й строки значениями со второй строки в колонках 4 и 6
Может есть у кого то мысли по этому поводу.
создание DataSet
void CreateDataTable(string tName)
public void CreateDataTable(string tName)
{
FDataSet = new DataSet();
FDataTable = new DataTable();
m_tName = tName;
FDataTable.TableName = tName;
FDataSet.Tables.Add(FDataTable);
FDataSet.Clear();
}
// Создание колонок
public void CreateColumns(int cId) // в методе указываем необходимое кол-во столбцов
{
for (Int32 i = 1; i <= cId; i++)
{
FDataTable.Columns.Add("col" + i, typeof(string));
}
columnCount = FDataTable.Columns.Count;
rowArray = new object[columnCount];
report.RegisterData(FDataSet);
report.GetDataSource(m_tName).Enabled = true;
}
// заполнение данными
public void AddRows(int RowId, string glValue)
{
try
{
rowArray[RowId] = glValue;
tempRow = FDataTable.NewRow();
tempRow.ItemArray = rowArray;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
Ну и последний метод, который заполняет мой DataSET
// Вставка масива колонок в DataTable
public void ArrayRows()
{
try
{
FDataTable.Rows.Add(tempRow);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
И тут самое интересное, если заполняется где то пустым значением
Пример: 1..7 колонки
1 2 3 4 5 6 7
A B C D E
B C G T T U
V H T U
для второй и третьей строки продублируются записи со строки 1 в колоке 3. а дя 3-й строки значениями со второй строки в колонках 4 и 6
Может есть у кого то мысли по этому поводу.