我是在一个存储过程中写了多个select语句,然后将这个存储过程拖到dataset.xsd里面去,它会自动生成多个表,一般好象有几个select就生成几个表,代码如下,你看一下,我也是刚开始用这东西,有什么不明白的,大家再讨论下myconn = new SqlConnection("data source=111-222;initial catalog=zjsys;user id=sa;password=1104;");
myconn.Open();
SqlCommand mycmd2 = new SqlCommand("sp1",myconn);
mycmd2.CommandType = CommandType.StoredProcedure;
SqlParameter myparm1=new SqlParameter("@operater",SqlDbType.NVarChar,15);
SqlParameter myparm2=new SqlParameter("@currentdate",SqlDbType.DateTime);

mycmd2.Parameters.Add(myparm1);
mycmd2.Parameters.Add(myparm2);
myparm1.Direction=ParameterDirection.Input;
myparm2.Direction=ParameterDirection.Input;
myparm1.Value=DropDownList1.SelectedItem.Text;
myparm2.Value=DropDownList2.SelectedItem.Text; myAdapter2 = new SqlDataAdapter("exec sp1 @operater,@currentdate",myconn);

myAdapter2.SelectCommand = mycmd2; myAdapter2.TableMappings.Add("sp11","Table1");
myAdapter2.TableMappings.Add("sp12","Table2");
myAdapter2.TableMappings.Add("sp13","Table3");
myAdapter2.TableMappings.Add("sp14","Table4");
myAdapter2.TableMappings.Add("sp15","Table5");//同一个存储过程中有多个select语句时,当把这个sp拖如dataset.xsd里面会同时生成多张表,
myAdapter2.Fill(myDataset,"sp1");

CR.SetDataSource(myDataset);
CrystalReportViewer1.ReportSource = CR;
CrystalReportViewer1.Visible=true;/////////
CrystalReportViewer1.DisplayToolbar = false;//不显示水晶报表工具栏
CrystalReportViewer1.DataBind();

解决方案 »

  1.   

    我想问的是一个xsd,然后给它不同的dataset填充,"同一个存储过程中有多个select语句时,当把这个sp拖如dataset.xsd里面会同时生成多张表,“
    怎么把存储过程拖到dataset.xsd里面啊报表显示存储过程检索的列。
      

  2.   

    不是很明白你的意思,我的做法是,
    先建一个dataset.xsd
    然后建一个crystalreport.rpt,
    然后拖一个crystalreportviewer进去,
    在pageload里面加入上面的代码,
    然后到dataset.xsd里面去,在服务器资源管理器里面找到用到的存储过程,把它拖到.xsd里面去,
    然后到.rpt里面‘添加删除数据库’里面加入这个dataset,
    再从字段资源管理器里面拖入要的字段进.rpt就ok了,
    不知道你是怎么做的,拿出来大家一快讨论下
      

  3.   

    我明白你的意思,你意思说是没给存储过程都要建立一个
    dataset.xsd和一张crystalreport.rpt
    然后选择你要的字段
    我的意思是要一个dataset.xsd和一张crystalreport.rpt
    调用很多Sql,crystalreport.rpt会显示相应的记录
    不必每个存储过程都要做一张报表 下面是我的简略代码,这个是调用一张表,显示表中所有字段,我报表中没选取字段
    string strSqlConnection="Data Source=huaweimeng;User Id=sa;Password=1027;database=lab";
    string SqlString="select * from 学生情况表";
    SqlConnection m_SqlConnection = new SqlConnection(strSqlConnection);
    m_SqlConnection.Open();
    SqlDataAdapter myAd=new SqlDataAdapter(SqlString,m_SqlConnection);
    DataSet myDataSet1= new DataSet();
    myAd.Fill(myDataSet1,"学生情况表");
    CrystalReport1 myReport = new CrystalReport1();
    myReport.SetDataSource(myDataSet1);
    crystalReportViewer1.ReportSource=myReport;
    m_SqlConnection.Close();
      

  4.   

    这里是没写存储过程,但都一样的啊,我不希望每个表或者存储过程都要建立一个
    dataset.xsd和一张crystalreport.rpt
    我希望用select检索出来的列添充crystalreport字段
      

  5.   

    你的sql复杂不,不复杂的话,不如用pull试一下
    还有,你上面的代码好象不能反映你要表达的意思啊
      

  6.   

    pull 是什么意思啊
    我的意思很简单啊 我是想生成我程序中dataset()数据集中的报表啊,一张crystalreport.rpt(空白)最后报表中的内容是我检索出来的字段及其数据啊
    请问还有什么不明白的啊
      

  7.   

    明白了,结合你上面说的
    “我的意思是要一个dataset.xsd和一张crystalreport.rpt
    调用很多Sql,crystalreport.rpt会显示相应的记录
    不必每个存储过程都要做一张报表 ”我觉得不可以,因为这两天我也碰到了类似的问题,因为.rpt文件中字段是你要一个个从字段资源管理器中拖入的,我想还是要每个表单独做一个.rpt,以及dataset