2015-03-18 2 views
1
using (SqlConnection conn = new SqlConnection(connection)) 
{ 
    SqlDataAdapter da = new SqlDataAdapter(); 
    DataTable ds = new DataTable(); 

    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = conn; 

    conn.Open(); 

    cmd.CommandText = StoredProcedure; 
    cmd.CommandType = System.Data.CommandType.StoredProcedure; 
    cmd.Parameters.Add(new SqlParameter("@iDomainID", 1)); 

    foreach (var item in reportParams) 
    { 
     cmd.Parameters.Add(new SqlParameter("@" + item.ParameterName, "'" + item.FieldValue + "'")); 
    } 

    da.SelectCommand = cmd; 
    da.Fill(ds); 

    conn.Close(); 

    string strFile; 
    strFile = "Reports/" + ReportName; 

    ReportViewer1.Visible = true; 
    System.IO.StreamReader sr = new System.IO.StreamReader(HttpContext.Current.Server.MapPath("/") + strFile); 
    string strReportdef = sr.ReadToEnd(); 
    sr.Close(); 

    ReportViewer1.LocalReport.EnableExternalImages = true; 
    ReportViewer1.LocalReport.ReportPath = HttpContext.Current.Server.MapPath("/") + strFile; 

    int iTables = 0; 
    System.Collections.Generic.IList<string> ilReportDSs = ReportViewer1.LocalReport.GetDataSourceNames(); 

    for (iTables = 0; iTables < ds.Columns.Count; iTables++) 
    { 
     ReportDataSource rdSource = new ReportDataSource(ilReportDSs[iTables], ds.Columns[iTables]); 
     ReportViewer1.LocalReport.DataSources.Add(rdSource); 
    } 

    ReportViewer1.DataBind(); 
}  

Это приводит к ошибке вКак передать таблицу данных в SSRS Report Viewer?

for (iTables = 0; iTables < ds.Columns.Count; iTables++) 
{ 
    ReportDataSource rdSource = new ReportDataSource(ilReportDSs[iTables], ds.Columns[iTables]); 
    ReportViewer1.LocalReport.DataSources.Add(rdSource); 
} 

Для ReportDataSource rdSource = new ReportDataSource(ilReportDSs[iTables], ds.Columns[iTables]);

Как я должен передать данные таблицы, чтобы сообщить зрителю? Пытался изменить его на набор данных, но это вызывает ошибку для исключения хранимой процедуры с использованием набора данных, как я буду проходить с использованием таблицы данных ..?

ответ

0

Я использую

   this.CAreports.LocalReport.DataSources.Add(new ReportDataSource(strDSN, ReportData)); 

Где strDSN это имя набора данных в отчете и ReportData представляет собой таблицу данных, содержащую данные отчета. Поэтому для каждого набора данных в отчете вам нужно добавить соответствующее имя пары Data Name Name и таблицу данных, содержащую данные для этого набора данных. Имя набора данных должно соответствовать одному в определении отчета. Столбцы в таблице данных должны совпадать с столбцами в наборе данных отчета.

Для местных отчетов вы должны предоставить данные, которые будут отображаться в отчете. Это ключевое различие между локальным отчетом (.RDLC) и отчетом на стороне сервера (.RDL). Фактически вы можете записывать все свои отчеты в виде отчетов на стороне сервера, используя визуальную студию, и просто запускать их как локальные отчеты, предоставляя данные для них. Другое ключевое отличие - отчеты на стороне сервера позволяют использовать динамические параметры, тогда как они должны быть статическими для локальных отчетов, но снова вы просто предоставляете значения параметров для них во время выполнения.

Смежные вопросы