Gere colunas dinamicamente no RDLC
Estou tentando gerar um relatório RDLC no ASP.NET, onde as colunas do meu conjunto de dados serão dinâmicas e determinadas apenas em tempo de execução.
Eu criei uma função que retorna uma DataTable e, selecionando essa função no assistente de relatório RDLC,Eu posso gerar meu relatório com sucesso.
public DataTable GetTable()
{
// Here we create a DataTable with four columns.
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
table.Columns.Add("testColumn", typeof(DateTime));
// Here we add five DataRows.
table.Rows.Add(25, "Indocin", "David", DateTime.Now);
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
return table;
}
Mas, se eu fizer uma pequena alteração na função para que minha tabela de dados seja realmente dinâmica, preenchendo colunas do banco de dados, minha função não será exibida no assistente de relatório.
Esta é a minha função alterada
public DataTable GetTable2()
{
// Here we create a DataTable with four columns.
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
table.Columns.Add("testColumn", typeof(DateTime));
SqlConnection connection = new SqlConnection();
connection = Connection.getConnection();
connection.Open();
string tableName = "";
tableName += "Subject";
string Query = "select * from " + tableName + " where Status = 0;";
SqlDataAdapter da = new SqlDataAdapter(Query, connection);
DataSet ds = new DataSet();
da.Fill(ds);
DataRowCollection collection = ds.Tables[0].Rows;
foreach (DataRow row in collection)
{
// Here we add five DataRows.
table.Rows.Add(25, "Indocin", "David", DateTime.Now);
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
}
connection.Close();
return table;
}
Veja, a única alteração que fiz na função é consultar o banco de dados e gerar as colunas do conjunto de dados do relatório no loop que itera pelos dados do banco de dados. Mas, devido a essa alteração, minha função não aparece no Assistente de Relatório. Se eu omitir o código, ele aparecerá novamente.
Posso usar essa função para gerar um GridView muito bem, mas o problema está nos relatórios RDLC.
Meu objetivo é gerar a tabela de dados do relatório usando os resultados do banco de dados. Por favor me ajude.