且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在windows窗体c#上动态绑定数据源到reportviewer

更新时间:2023-12-06 12:24:34

好吧,想办法解决,昨天找到了一个我能接受的解决方案,所以想分享给大家:

OK, trying to figure it out, yesterday I found a solution which was acceptable to me, so I wanted to share with others:

1.st 您需要创建一个具有属性的类模型,以便将其添加到数据集中:例子:

1.st you need to create a class model with properties so it will be added in dataset: example:

namespace NavisReportLoader.App_Data
{
    public class ExtraMoveModel
    {
        public string EventType { get; set; }
        public int EventCount { get; set; }
        public int Num20 { get; set; }
        public int Num40 { get; set; }
        public int Num45 { get; set; }
        public int TEU { get; set; }
        public float Cargo { get; set; }
        public float Tare { get; set; }
        public float Total { get; set; }
    }
}

之后,您需要创建简单的类来连接数据库并调用存储过程,传递参数并使用数据读取器输出读取.在我的示例中,我已将其添加到列表中并枚举我的模型:

after that you need to create plain simple class for connecting to the database and call the stored procedure, pass the parameters and read using data reader output. In my example, I have added this into a list and enumerate my model:

示例:

public class ExtraMoveDataSet
{
    string connectionString = @"Data Source=sampleDB; Initial Catalog=test; User Id=sa; Password=test";
    public IEnumerable<ExtraMoveModel> extraMove(DateTime dateFrom, DateTime dateTo)
    {
        var tempList = new List<ExtraMoveModel>();
        //string connectionString = @"Data Source=nsqltest; Initial Catalog=sparcsn4; User Id=sa; Password=lo02Nova";
        SqlConnection conn = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand("AGCT_ServiceEventReport", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@dateFrom", dateFrom);
        cmd.Parameters.AddWithValue("@dateTo", dateTo);
        conn.Open();

        using (var dr = cmd.ExecuteReader())
        {
            while (dr.Read())
            {
                var temp = new ExtraMoveModel();
                temp.EventType = dr["event_type"].ToString();
                temp.EventCount = Convert.ToInt32(dr["CNT"]);
                temp.Num20 = Convert.ToInt32(dr["NUM20"]);
                temp.Num40 = Convert.ToInt32(dr["NUM40"]);
                temp.Num45 = Convert.ToInt32(dr["NUM45"]);
                temp.TEU = Convert.ToInt32(dr["TEU"]);
                temp.Cargo = float.Parse(dr["Cargo"].ToString(),new CultureInfo("hr-HR"));
                temp.Tare = float.Parse(dr["Tare"].ToString(),new CultureInfo("hr-HR"));
                temp.Total = float.Parse(dr["Total"].ToString(),new CultureInfo("hr-HR"));
                tempList.Add(temp);
            }
        }
        conn.Close();
        return tempList;
    }

  1. 步骤是创建与模型属性同名的数据集.

  1. 步骤创建您将绑定数据集的报告.

  1. 最后你可以把它添加到reportViewer1

  1. finally you can add it to the reportViewer1

private void ReportForm_Load(object sender, EventArgs e)
{
    ExtraMoveDataSet emDS = new ExtraMoveDataSet();
    if (idRep.Equals("extraMove"))
    {
        ReportParameter[] param = new ReportParameter[2];
        param[0] = new ReportParameter("date1", dat1);
        param[1] = new ReportParameter("date2", dat2);
        //string path = Directory.GetCurrentDirectory();
        //string replace = path.Replace("\bin\Debug", "") + "\App_Data\"+"ReportExtraMove.rdlc";
        var ret = emDS.extraMove(d1, d2);
        ReportDataSource rds = new ReportDataSource("extraMove", ret.ToArray());
        this.reportViewer1.LocalReport.DataSources.Add(rds);
        //this.reportViewer1.LocalReport.ReportPath = replace;
        this.reportViewer1.LocalReport.ReportEmbeddedResource = "NavisReportLoader.App_Data.ReportExtraMove.rdlc";
        this.reportViewer1.LocalReport.SetParameters(param);
        this.reportViewer1.RefreshReport();
    }
}

我希望这能帮助其他人加快速度.

I hope this will help other to speed things up.

干杯!