无法使所有记录显示在报表查看器中

问题描述

[编辑:我添加了数据可视化器] 我有一个老师的注册,其中的记录是使用sql数据库中的插入按钮输入的,

private void insertdata(object sender,RoutedEventArgs e)
        {
            try
            {
                string name = name_field.Text;
                string email = email_field.Text;

                string id = id_field.Text;
                string gender;
                if (male.IsChecked == true)
                {
                    gender = "M";
                }
                else
                    gender = "F";


                if (String.IsNullOrEmpty(dob.Text))
                {
                    string fe = "01/01/1900 12:00:00 AM";
                    dt = Convert.ToDateTime(fe);
                }
                else
                {
                    dt = Convert.ToDateTime(dob.Text);

                }



                var rich1 = new TextRange(this.history.Document.ContentStart,this.history.Document.ContentEnd);

                string teach_history = rich1.Text;

                var rich2 = new TextRange(this.achievement.Document.ContentStart,this.achievement.Document.ContentEnd);

                string teach_achievement = rich2.Text;

                connect();
                con.open();


                string saved = "insert into teacher_details ([Teacher ID],Name,Gender,Email,[Date of Birth],Employment History,Achievements)values('" + id + "','" + name + "','" + gender + "','" + email + "','" + dt + "','" + teach_history + "','" + teach_achievement + "')";

                sqlCommand cmd = new sqlCommand(saved,con);

                cmd.ExecuteReader();

                con.Close();

                MessageBox.Show("record is added");
              
            }
            catch(Exception ex)
            {
                MessageBox.Show("error occured " + ex);
            }

我将身份证,性别,姓名,电子邮件,历史记录,成就,出生日期作为我的字段。我为此做了一个课,如下:

    class Teacherdetail
    {
        public string id { get; set; }
        public string name { get; set; }
        public string email { get; set; }
        public string gender { get; set; }
        public string history { get; set; }
        public string acheive { get; set; }
        public DateTime dob { get; set; }
    }

在rdlc报告中,我使用对象作为我的数据集并选择Teacherdetail。然后我做了一张桌子,如下:

teacherreport.rdlc

然后我有一个按钮视图报告,在其中我将详细信息调用到称为教师报告的报告查看器中

ReportDataSource reportDataSource = new ReportDataSource();
            connect();
            con.open();

            sqlDataAdapter adp = new sqlDataAdapter("select [Teacher ID],email,[Employment History],Achievements from teacher_details",con);

            DataTable newtab = new DataTable();
            adp.Fill(newtab);
            reportDataSource.Name = "DataSet1";



            reportDataSource.Value = newtab;

            teacherreport.LocalReport.ReportPath = "C:\\Users\\Preeti Rawat\\Documents\\Visual Studio 2012\\Projects\\STDNT\\STDNT\\teacherreport.rdlc"; 



            teacherreport.LocalReport.DataSources.Add(reportDataSource);

            teacherreport.LocalReport.Refresh();
            teacherreport.RefreshReport();

enter image description here

我的问题是ID,历史记录,名称和成就丢失了。

当我调试程序时,在我的数据可视化器中它确实表明信息正在传递。

enter image description here

但是在程序中时它仍然没有出现。问题可能是什么,如何解决?谢谢^^

解决方法

对于您的特定问题,在您的insertdata中,您正在呼叫ExecuteReader插入新记录,这是错误的。您需要调用ExecuteNonQueryINSERT,UPDATE,DELETE个操作。

另外,在:

string saved = "insert into teacher_details ([Teacher ID],Name,Gender,Email,[Date of Birth],Employment History,Achievements)values('" + id + "','" + name + "','" + gender + "','" + email + "','" + dt + "','" + teach_history + "','" + teach_achievement + "')";

这应该返回一个SQL错误,因为Employment History不包含在括号[]中。

这是您方法的修订版。 (我试图保持相同的工作)。

var name = name_field.Text;
var name = name_field.Text;
var email = email_field.Text;
var id = id_field.Text;
var gender = male.IsChecked ? "M" : "F";
var dt = DateTime.TryParse(dob.Text,out DateTime result) ? result : new DateTime(1900,1,1); 
var teach_history = new TextRange(this.history.Document.ContentStart,this.history.Document.ContentEnd).Text;
var teach_achievement = new TextRange(this.achievement.Document.ContentStart,this.achievement.Document.ContentEnd).Text;


const string query = "INSERT INTO teacher_details([Teacher ID],[Employment History],Achievements) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}'); ";      

var saved = string.Format(query,id,name,gender,email,dt.ToString("yyyy-MM-ddThh:mm:ss"),teach_history,teach_achievement)

connect();
con.Open();

using(var cmd = new SqlCommand(saved,con))
{
    cmd.ExcuteNonQuery();
}

con.Close();

MessageBox.Show("record is added");

您应在using上使用SqlConnection块,或手动处置连接。另外,我建议您开始使用Entity Framework代替数据库操作。

对于报告部分,您需要执行以下操作:

var table = new DataTable();

const string query = "SELECT [Teacher ID],Achievements from teacher_details";

connect();
con.Open();

var adapter = new SqlDataAdapter(query,con);
    adapter.Fill(table);

var reportDataSource = new ReportDataSource("Dataset1",table);

teacherreport.LocalReport.ReportPath = "C:\\Users\\Preeti Rawat\\Documents\\Visual Studio 2012\\Projects\\STDNT\\STDNT\\teacherreport.rdlc"; 

teacherreport.LocalReport.DataSources.Clear();  

teacherreport.LocalReport.DataSources.Add(reportDataSource);  

teacherreport.LocalReport.Refresh();

teacherreport.RefreshReport(); 
,

之所以不起作用,是因为类名与表的字段名不同。它们必须相同。因此,我更改了数据库表的列名,使其看起来像这样:

教师ID,姓名,性别,电子邮件,出生日期,就业历史,成就

我的课看起来像这样:

        public int Teacher_ID { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string email { get; set; }
        public DateTime Date_of_Birth { get; set; }
        public string Employment_History { get; set; }
        public string Achievements { get; set; }