Generar columnas dinámicamente en RDLC
Estoy tratando de generar un informe RDLC en ASP.NET donde las columnas de mi conjunto de datos serán dinámicas y determinadas solo en tiempo de ejecución.
He creado una función que devuelve un DataTable, y al seleccionar esta función en el asistente de informes RDLC,Puedo generar mi informe con éxito.
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;
}
Pero, si hago un ligero cambio en la función para que mi tabla de datos sea verdaderamente dinámica, al llenar columnas de la base de datos, mi función no aparece en el asistente de informes.
Esta es mi función modificada
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;
}
Verá, el único cambio que he hecho a la función es consultar desde la base de datos y generar las columnas del conjunto de datos del informe dentro del ciclo que recorre los datos de la base de datos. Pero debido a este cambio, mi función no aparece en el Asistente de informes. Si omito el código, vuelve a aparecer.
Puedo usar esta función para generar un GridView muy bien, pero el problema es con los informes RDLC.
Mi objetivo es generar la tabla de datos del informe utilizando los resultados de la base de datos. Por favor, ayúdame.