5

ReportDataSourceDapper を使用してクエリをフィードしています。IEnumerableただし、データがロードされていても、空のレポートがあります。Datatable作品を過ごすとき。

Dapper for を使用してクエリからデータを渡すにはどうすればよいReportViewerですか?

this.reportViewer.LocalReport.DataSources.Clear(); 
DataTable dt = new DataTable(); 

dt = CN.Query(Sql, param);

Microsoft.Reporting.WinForms.ReportDataSource rprtDTSource = new Microsoft.Reporting.WinForms.ReportDataSource(dt.TableName, dt); 
this.reportViewer.LocalReport.DataSources.Add(rprtDTSource); 
this.reportViewer.RefreshReport(); –
4

4 に答える 4

9

Dapperが DataTableをサポートするようになったようです...

テストから:

public void ExecuteReader()
{
    var dt = new DataTable();
    dt.Load(connection.ExecuteReader("select 3 as [three], 4 as [four]"));
    dt.Columns.Count.IsEqualTo(2);
    dt.Columns[0].ColumnName.IsEqualTo("three");
    dt.Columns[1].ColumnName.IsEqualTo("four");
    dt.Rows.Count.IsEqualTo(1);
    ((int)dt.Rows[0][0]).IsEqualTo(3);
    ((int)dt.Rows[0][1]).IsEqualTo(4);
}

DataTable を TableValueParameter として使用することもサポートされるようになりました。

public void DataTableParameters()
{
    try { connection.Execute("drop proc #DataTableParameters"); } catch { }
    try { connection.Execute("drop table #DataTableParameters"); } catch { }
    try { connection.Execute("drop type MyTVPType"); } catch { }
    connection.Execute("create type MyTVPType as table (id int)");
    connection.Execute("create proc #DataTableParameters @ids MyTVPType readonly as select count(1) from @ids");

    var table = new DataTable { Columns = { { "id", typeof(int) } }, Rows = { { 1 }, { 2 }, { 3 } } };

    int count = connection.Query<int>("#DataTableParameters", new { ids = table.AsTableValuedParameter() }, commandType: CommandType.StoredProcedure).First();
    count.IsEqualTo(3);

    count = connection.Query<int>("select count(1) from @ids", new { ids = table.AsTableValuedParameter("MyTVPType") }).First();
    count.IsEqualTo(3);

    try
    {
        connection.Query<int>("select count(1) from @ids", new { ids = table.AsTableValuedParameter() }).First();
        throw new InvalidOperationException();
    } catch (Exception ex)
    {
        ex.Message.Equals("The table type parameter 'ids' must have a valid type name.");
    }
}
于 2014-09-16T14:17:11.173 に答える
0

Dapper がどのように機能するかはわかりませんが、データテーブルは次のようにバインドされています。

DataTable dt = new DataTable();
DataColumn dc = dt.Columns.Add();
dc.ColumnName = "DataColumn1";
dc = dt.Columns.Add();

dc.ColumnName = "DataColumn2";
dt.Rows.Add(new object[] { "Frank", 32 });
this.reportViewer1.LocalReport.DataSources.Clear();

this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1_DataTable1", dt));
this.reportViewer1.RefreshReport();

私は C# を使用しているので、次のようにデータ ソースをバインドします。

this.bindingSource1.DataSource = getListMethod(); // this method/property returns a list of objects
this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Point", (this.bindingSource1)));
//Point is the datatable name in my Dataset.xsd file
于 2013-07-19T22:11:15.417 に答える