日期:2014-05-20  浏览次数:21052 次

微软报表RDLC动态绑定数据:RDLC对应的DataSet1.xsd,C#代码取得的DataSet,这两张皮贴不到一起!
本帖最后由 henrydee1 于 2014-01-12 16:37:40 编辑
微软报表RDLC动态绑定数据:RDLC对应的DataSet1.xsd,C#代码取得的DataSet,这两张皮贴不到一起!
Report1.rdlc里面调用数据集合DataSet1.xsd,这个数据集合选择好了[BIANHAO][MINGCHENG][FUZEREN],和以前定死的没区别。

C#代码取得的DataSet,有10000多行啊,可是表里面是空白的。
我查了断点,每一句都执行了。
Report1.rdlc设置了《始终复制》
reportViewer1.LocalReport.的属性方法都看了,没什么还需要调用的了。。。

代码:
using Microsoft.Reporting.WinForms;

//取数据
    searchstring = "select * from ShenBao";
    conn.Fill(searchstring, "ShenBao");

    int i = conn.ds.Tables["ShenBao"].Rows.Count;//断点可看到这个i=10000多,取来的数据没问题
//绑定数据,这四行都执行了
    ReportDataSource rds = new ReportDataSource("DataSet1", conn.ds.Tables["ShenBao"]);
    reportViewer1.LocalReport.ReportPath = "Report1.rdlc";
    reportViewer1.LocalReport.DataSources.Add(rds);
    reportViewer1.LocalReport.Refresh();




取数据子函数代码,Open();里面封转了数据库连接,经常用,而且刚才断点可看到行数了,应该没问题。
/// <summary>
/// 建立DataSet对象,用记录填充或构架(如果必要)DataSet对象,DataSet即是数据在内存的缓存
/// </summary>
/// <param name="str_Sql">打开表Sql语句</param>
/// <param name="TableName">重载,可以接收表名</param>
public string Fill(string str_Sql, string TableName)
{
    Open();

    myAdapter = new System.Data.OleDb.OleDbDataAdapter(str_Sql, myConnection);
    myAdapter.TableMappings.Add("Table", TableName);
//这个地方需要设置前面的sourcetable和datasettable吗?????????
水晶报表里,这里我这样设置没错啊!!!!!!!

    ds = new DataSet();
    try
    {
myAdapter.Fill(ds, TableName);
    }
    catch (SqlException e)
    {
string errorMessage = e.Message;
return errorMessage;
    }
    finally
    {
myConnection.Dispose();
    }

    return "OK";
}

------解决方案--------------------
报表数据源名称不对?

ReportDataSource rds = new ReportDataSource("ShenBao", conn.ds.Tables["ShenBao"]);

名字错了?