none
如何编程引用本地rdlc报表中的某列? RRS feed

  • 问题

  • 我有一个本地rdlc报表,现在想实现根据用户的选择,动态隐藏其中的某列,但不知道
    要如何才能引用到报表中的某列?得到列的引用后,实现隐藏就简单了。请大大们指教!
    2013年2月28日 7:14

答案

  • Hi WanBoLan,

      欢迎来到MSDN中文论坛。我觉得你首先应该组织好DataRow 的绑定或者隐藏。打个比方,像下面的例子:

     
     try
            {
                if (!IsPostBack)
                {
                    DataSet DsTest = new DataSet("dtTest");
                    DataTable dtTest = new DataTable("dtTest");
               
                    dtTest.Columns.Add("EmpName", System.Type.GetType("System.String"));
                    dtTest.Columns.Add("EmpId", System.Type.GetType("System.Int32"));
                    dtTest.Columns.Add("EmpSal", System.Type.GetType("System.Double"));
    
    
                    DataRow dr;
                    for (int iIndex = 0; iIndex < 99; iIndex++)
                    {
                        dr = dtTest.NewRow();
                        dr["EmpId"] = "100" + iIndex.ToString();
                        dr["EmpName"] ="Kapil Dev-  "+  iIndex.ToString();
                        dr["EmpSal"] = (iIndex * 32678).ToString();
                        dtTest.Rows.Add(dr);
                    }
                    DsTest.Tables.Add(dtTest);
    
    
                    ReportViewer1.Visible = true;
                    ReportDataSource datasource = new ReportDataSource("DataSet1", DsTest.Tables[0]);
                    ReportViewer1.LocalReport.DataSources.Clear();
                    ReportViewer1.LocalReport.DataSources.Add(datasource);
                    ReportViewer1.LocalReport.Refresh();      
                }
            }
            catch
            {
    
            }

        如果你要过滤掉某一列,你就要删除掉对应绑定的该列,如去掉对应的这列dtTest.Columns.Add("EmpName", System.Type.GetType("System.String"));如果你要过滤掉某一行,你要在for循环中把某一行过滤掉,就要注意把那行通过条件比较语句筛选出来,希望我的建议对你有帮助。还有Crystal Report有新的地方提供这方面更好的帮助,你可以转向到改论坛得到更多的专家的支持。

     

    http://scn.sap.com/community/crystal-reports-for-visual-studio/content?filterID=content~objecttype~objecttype[thread]



    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us


    2013年3月1日 2:41
    版主
  • Hi WanBoLan,

      这个办法已经在DataTable 并且放在DataSet中把该列省略了,你再仔细看下!


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 WanBoLan 2015年7月13日 6:07
    2013年3月8日 7:29
    版主

全部回复

  • Hi WanBoLan,

      欢迎来到MSDN中文论坛。我觉得你首先应该组织好DataRow 的绑定或者隐藏。打个比方,像下面的例子:

     
     try
            {
                if (!IsPostBack)
                {
                    DataSet DsTest = new DataSet("dtTest");
                    DataTable dtTest = new DataTable("dtTest");
               
                    dtTest.Columns.Add("EmpName", System.Type.GetType("System.String"));
                    dtTest.Columns.Add("EmpId", System.Type.GetType("System.Int32"));
                    dtTest.Columns.Add("EmpSal", System.Type.GetType("System.Double"));
    
    
                    DataRow dr;
                    for (int iIndex = 0; iIndex < 99; iIndex++)
                    {
                        dr = dtTest.NewRow();
                        dr["EmpId"] = "100" + iIndex.ToString();
                        dr["EmpName"] ="Kapil Dev-  "+  iIndex.ToString();
                        dr["EmpSal"] = (iIndex * 32678).ToString();
                        dtTest.Rows.Add(dr);
                    }
                    DsTest.Tables.Add(dtTest);
    
    
                    ReportViewer1.Visible = true;
                    ReportDataSource datasource = new ReportDataSource("DataSet1", DsTest.Tables[0]);
                    ReportViewer1.LocalReport.DataSources.Clear();
                    ReportViewer1.LocalReport.DataSources.Add(datasource);
                    ReportViewer1.LocalReport.Refresh();      
                }
            }
            catch
            {
    
            }

        如果你要过滤掉某一列,你就要删除掉对应绑定的该列,如去掉对应的这列dtTest.Columns.Add("EmpName", System.Type.GetType("System.String"));如果你要过滤掉某一行,你要在for循环中把某一行过滤掉,就要注意把那行通过条件比较语句筛选出来,希望我的建议对你有帮助。还有Crystal Report有新的地方提供这方面更好的帮助,你可以转向到改论坛得到更多的专家的支持。

     

    http://scn.sap.com/community/crystal-reports-for-visual-studio/content?filterID=content~objecttype~objecttype[thread]



    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us


    2013年3月1日 2:41
    版主
  • 也可以使用DataView的ToTable方法重新绑定到Report,设置RowFilter条件进行过滤。

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    2013年3月1日 3:36
    版主
  • 谢谢您的答复,但你的方法,只能解决某列是否显示数据的问题,但却无法解决隐藏某列的问题。

    按您 的方法,某列是不显示数据了,但在报表上该列还是存在的,只是显示的空白了。现在想要

    的结果是该列在报表就直接隐藏了,在报表上不显示出来。

    2013年3月7日 5:04
  • Hi WanBoLan,

      这个办法已经在DataTable 并且放在DataSet中把该列省略了,你再仔细看下!


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 WanBoLan 2015年7月13日 6:07
    2013年3月8日 7:29
    版主