1

期待されるデータ値を返さないコード ブロックがあります。

protected void Page_Load(object sender, EventArgs e)
{
corpEmployee.Employee editEmp = new corpEmployee.Employee();

editEmp.EmployeeID = PatientCustomerID.Value;
corpCustomerMgr.GetEmployeeRecord(editEmp);

tboxFirstName.Text = editEmp.EmpFirstName.ToString();
tboxLastName.Text = editEmp.EmpLastName.ToString();
tboxCity.Text = editEmp.EmpCity.ToString();
tboxAddress.Text = editEmp.EmpAddrLine1.ToString();
}  


public static void GetEmployeeRecord(corpEmployee.Employee QueryData)
{
    try
    {
        List<corpEmployee.Employee> empRecord = new List<corpEmployee.Employee>();
        corpCustomerDAL.GetEmployeeData(empRecord, QueryData);
    }
    catch (Exception ex)
    {
    LogAppError(ex.ToString());
    }
}  

corpCustomerDAL.GetEmployeeData(empRecord, QueryData); 実行されると、正しいプロパティ値を持つ Employee オブジェクトとともに empRecord が返されます。ただし、コードがcorpCustomerMgr.GetEmployeeRecord(editEmp);従業員オブジェクトに戻ると、null 値が含まれています。

Employee オブジェクトの値を Page_Load ルーチンに戻すにはどうすればよいですか?

4

4 に答える 4

2

GetEmployeeRecordオブジェクトを静的メソッドに戻すかref、変数をコピーする代わりに従業員を参照として渡すように引数の前に含めることができます。

ref他の理由の中でも、メソッド名が誤解を招くように見えるため、使用するよりもデータを返すことをお勧めします。

于 2012-07-25T20:11:45.937 に答える
1

コメントによるとempRecord、必要な従業員データを入力しているようです。最も簡単なオプションは、入力されたレコードを から返すことですGetEmployeeRecord

public static corpEmployee.Employee GetEmployeeRecord(corpEmployee queryData)
{
    List<corpEmployee.Employee> empRecord = new List<corpEmployee.Employee>();
    corpCustomerDAL.GetEmployeeData(empRecord, QueryData);
    return empRecord.Count == 0 ? null : empRecord[0];  //or empRecord.FirstOrDefault()
}

Page_Load次に、ハンドラの開始を次のように変更する必要があります。

corpEmployee.Employee queryEmp = new corpEmployee.Employee();
queryEmp.EmployeeID = PatientCustomerID.Value;

corpeEmployee.Employee editEmp = corpCustomerMgr.GetEmployeeRecord(queryEmp);
于 2012-07-25T20:55:38.357 に答える
0

おそらく何が起こっているのかというと、渡した従業員オブジェクトがコピーされており、関数が終了すると破棄されます。説明をわかりやすくするために、いくつかのコメントを追加しました。

public static void GetEmployeeRecord(corpEmployee.Employee QueryData)
{
    //QueryData is a newly created Employee here, and is NOT the same one that was passed in.
    try
    {
        List<corpEmployee.Employee> empRecord = new List<corpEmployee.Employee>();
        corpCustomerDAL.GetEmployeeData(empRecord, QueryData);//
        //QueryData now contains the data you want your original object to contain
    }
    catch (Exception ex)
    {
    LogAppError(ex.ToString());
    }
}  //when this function terminates, QueryData ceases to exist.

これを修正するには、現在行っている値で渡すのではなく、参照で従業員を渡します(refキーワードを使用します)。

于 2012-07-25T20:18:26.873 に答える
0

すぐに次の 2 つの考えが浮かびます。

  • 例外処理には作業が必要です。をキャッチExceptionしてはいけませんし、黙って例外を飲み込んではいけません。例外がスローされている可能性があり、それがデータを取得していない理由です。

  • あなたはメソッドを持っています - それはデータを返すGet***はずです。結果がオブジェクトに入れられることを期待しているようです...これは、メソッドからデータを取得するための紛らわしい方法です。メソッドのシグネチャが次のようなものであれば、より明確になります。

    public static Employee GetEmployeeRecord(string employeeId)
    
于 2012-07-25T20:12:57.100 に答える