从另一个类获取字符串,不返回任何结果

时间:2018-08-08 06:52:47

标签: c#

我已经创建了一个加载crystalreport的类,以便使用来自我的访问数据库的数据加载我的crystal报告。我还有另一个类,其中包含一个表单和文本框,我试图用它们来查询数据库并返回所需的结果纳入我的报告。对于任何意粉代码,我深表歉意,对于这个过程我还是很陌生。我也愿意寻求更好的实施建议。我没有任何错误,但是当我尝试使用'ProviderNumber'(textBox3)文本框中的数据加载水晶报表时,使用数据库中的providernumber时,我会返回0个结果。

第1类(包含提供者编号的文本框)

    public partial class Doctor : Form
{
    public string PrvNum
    {
        get { return textBox3.Text; }
        set { textBox3.Text = value; }
    }

第2类(根据提供者编号生成Crystal报告)

public partial class DoctorLetterPreview : Doctor
{
        public void LoadDoctorLetterPreview()
    {
        Doctor prvNum = new Doctor();
        string ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\PathologyWest.accdb";
        using (OleDbConnection con = new OleDbConnection(ConnectionString))
        using (OleDbCommand Command = new OleDbCommand(" Select * from Doctors where ProviderNumber = @prvNum", con))
        {
            Command.Parameters.Add("@prvNum", OleDbType.LongVarChar).Value = prvNum.PrvNum;
            con.Open();
            OleDbDataAdapter da = new OleDbDataAdapter(Command);
            DataSet ds = new DataSet();
            da.Fill(ds, "Doctors");
            MessageBox.Show(ds.Tables[0].Rows.Count.ToString());
            con.Close();

            DoctorsLetter rpt = new DoctorsLetter();
            rpt.SetDataSource(ds.Tables[0]);
            crystalReportViewer1.ReportSource = rpt;
            crystalReportViewer1.Refresh();

        }

    }

2 个答案:

答案 0 :(得分:2)

据我所知,您正在使用以下方式创建表单的新实例

Doctor prvNum = new Doctor();

,然后立即尝试访问表单的文本框,因为您刚刚创建了表单,所以该文本框为空。

从这里很难说出整个过程是什么样子,但是如果您已经以某种方式打开了该表单并在文本框中键入了值,则应该尝试查找该表单的特定实例并访问该实例

答案 1 :(得分:1)

在方法LoadDoctorLetterPreview()的最开始,您要创建类Doctor的新实例,这意味着您要创建新的Form。如果该表单是新表单,我猜它的TextBox名为textBox3是空的。因此,您在第Command.Parameters.Add("@prvNum", OleDbType.LongVarChar).Value行中将空文本作为参数。

您的方法应该获取现有的Doctor表单的引用,而不是创建新表单,或者应该(如果是这种情况)更改行

Doctor prvNum = new Doctor();

进入

Doctor prvNum = this;

告诉prvNum实际上是此方法启用的这种形式。