none
给《资产表》添加新资产后再在《合同表》给这个新资产登记新合同是出错! RRS feed

  • 问题

  • ----有两个表PropertyTable(资产表)和ContractTable(合同表),PropertyTable中的PropertyID(该表主键)对应ContractTable中的ContractID(非该表主键),同时PropertyTable中的City、Road、Address分别对应ContractTable中的City、Road、Address。 

    ----

    ----    在ContractTable中有一项TypeOFPayment(收款方式),我想在通过选择DropDownList_Address控件触发事件,让该控件根据DropDownList_Address的选择,自动显示出在ContractTable中相应的TypeOfPayment。我写的代码可以正常运行。 

    ----  

    ------  但今天发现一个特殊情况,导致出错。我新添加了一个资产在PropertyTable中,例如City=长沙市,Road=东风路,Address=二大爷。在添加新合同的界面中选择这个新资产,就会出错!
        我想,出错的原因应该是虽然PropertyTable中添加了新资产,但ContractTable中却还没有新资产的资料,我通过if (myct.TypeOfPayment ==null)和if (myct.ContractID ==null)来判断,但还是不行!请问该如何写在ContractTable中没有该资产记录的判断呢???

    ----

    ----一下是代码及图-------------- 

    ------------------------DropDownList代码-------------------------  

    protected void DropDownList_Address_SelectedIndexChanged(object sender, EventArgs e)
        {
            DataClassesDataContext db = new DataClassesDataContext();
            ContractTable myct = new ContractTable();
            PropertyTable mypt = new PropertyTable();
            //以下是两个Label显示相应的面积和收款方式
            mypt = db.PropertyTable.Where(c => c.City == DropDownList_City.SelectedItem.Value && c.Road == DropDownList_Road.SelectedItem.Value && c.Address == DropDownList_Address.SelectedItem.Value).FirstOrDefault();
            Label_PropertyTableBuildingArea.Text = mypt.BuildingArea.ToString();
            
            myct = db.ContractTable.Where(b => b.City == DropDownList_City.SelectedItem.Value && b.Road == DropDownList_Road.SelectedItem.Value && b.Address == DropDownList_Address.SelectedItem.Value).FirstOrDefault();
            string stTypeOfPayment = "上期收款方式:";
            if (myct.TypeOfPayment ==null)
            {
                
                stTypeOfPayment += "新建资产,无上期收款方式!";
    
            }
            stTypeOfPayment += myct.TypeOfPayment.ToString();
            Label_TypeOfPayment.Text = stTypeOfPayment;
        }
    

    -------------------------------未选择新资产“二大爷”时运行正常-------------  

    --------------------选择新资产“二大爷”后,出错提示-----------------------  


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年2月29日 4:42

答案

  • 試試看利用 myct == null 或是 myct.Any()來判斷。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月1日 1:31

全部回复

  •     今天忽然灵机一动,做了个异常,问题就解决了。。。

    我将这一段代码:

    string stTypeOfPayment = "上期收款方式:";
            if (myct.TypeOfPayment ==null)
            {
                
                stTypeOfPayment += "新建资产,无上期收款方式!";
    
            }
            stTypeOfPayment += myct.TypeOfPayment.ToString();
            Label_TypeOfPayment.Text = stTypeOfPayment;
    ---

    改成: 

    ---

    string stTypeOfPayment = "上期收款方式:";
            try
            {stTypeOfPayment +=myct.TypeOfPayment.ToString();}
            catch
            {stTypeOfPayment +="该资产首次使用,不存在上期合同收款方式";}
            Label_TypeOfPayment.Text = stTypeOfPayment;
    问题虽然通过另一种途径解决了,但我还是希望掌握通过  判断ContractTable中的ContractID  不存在PropertyTable中的PropertyID相同值  的方式来解决问题,请各位不吝赐教!谢谢!

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年2月29日 10:10
  • 或許你可以先以判斷myct是否為null再去做比較。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年2月29日 13:00
  • 我曾通过if (myct.TypeOfPayment ==null)和if (myct.ContractID ==null)来判断,但还是不行!,后来才想明白,这个时候我通过
     myct = db.ContractTable.Where(b => b.City == DropDownList_City.SelectedItem.Value && b.Road == DropDownList_Road.SelectedItem.Value && b.Address == DropDownList_Address.SelectedItem.Value).FirstOrDefault();
    写出来的myct其实并不存在,因为db.ContractTable中没有符合

    (b => b.City == DropDownList_City.SelectedItem.Value && b.Road == DropDownList_Road.SelectedItem.Value && b.Address == DropDownList_Address.SelectedItem.Value)

    的值, 那么如何判断myct是否为null呢?PropertyTable的PropertyID(主键)是ContractTable的ContractID的外键


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年2月29日 13:34
  • 試試看利用 myct == null 或是 myct.Any()來判斷。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月1日 1:31
  • if (myct==null)

    {    stTypeOfPayment +="该资产首次使用,不存在上期合同收款方式";}  我知道是这么写!

        但是myct.Any()我还没见过,请问这个东东要怎么使用?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年3月1日 1:37
  • 類似這樣的用法,你可以參考下面的文章。

    http://msdn.microsoft.com/en-us/library/bb534338.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月1日 2:09
  • 谢谢解答!我直接用myct==null就解决了!any()目前还不懂,慢慢消化。

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年3月1日 4:31