none
如何在表中给新合同增加相应的的项? RRS feed

  • 问题

  • 问题是:
        首先介绍一下表。有2个表:1.PropertyTable(资产表)、2.ContractTable(合同表)。以前两个表中都有City(所在城市)、Road(所在路段)、Address(门牌号),ContractTable中的City、Road、Address的外键是PropertyTable中的City、Road、Address(ContractTable中的City、Road、Address来源于PropertyTable)。
    --
        以前我是通过where ContractTable.City+ContractTable.Road+ContractTable.Address=PropertyTable.City+PropertyTable.Road+PropertyTable.Address的条件来联系两个表的,但这样在实际操作中比较麻烦。所以,我给PropertyTable添加了一个PropertyTableID,并把这个PropertyTableID设置为主键。然后我又给ContractTable添加了一个新的列ContractTableID,通过where ContractTable.City+ContractTable.Road+ContractTable.Address=PropertyTable.City+PropertyTable.Road+PropertyTable.Address的条件把PropertyTableID的值赋给ContractTableID,以后就可以用where ContractTable.ContractTableID=PropertyTable.PropertyTableID的条件来联系两个表了。
    --
        现在的问题是,我使用前台程序打开ContractTableAdd.aspx,添加新合同,怎么样可以在选择了City、Road、Address后,在点击‘确定’时自动在ContractTable中给添加的新合同增加相应的ContractTableID呢???
    --
        附带说一下,我用的是LinqToSQL!
    --
        下面是前台和后台程序。我觉得应该是在后台添加吧!?请各位不吝解答!!!谢谢!
    ======================部分前台代码=======================
    <td>
                    <asp:SqlDataSource ID="SqlDataSource_Road" runat="server" 
                        ConnectionString="<%$ ConnectionStrings:长铁物业公司资产数据库ConnectionString %>" 
                        
                        SelectCommand="SELECT DISTINCT [Road] FROM [PropertyTable] WHERE ([City] = @City) and propertystate='1'">
                        <SelectParameters>
                            <asp:ControlParameter ControlID="DropDownList_City" Name="City" 
                                PropertyName="SelectedValue" Type="String" />
                        </SelectParameters>
                    </asp:SqlDataSource>
                </td>
                <td>
                    <asp:SqlDataSource ID="SqlDataSource_Address" runat="server" 
                        ConnectionString="<%$ ConnectionStrings:长铁物业公司资产数据库ConnectionString %>" 
                        
                        SelectCommand="SELECT [Address] FROM [PropertyTable] WHERE (([City] = @City) AND ([Road] = @Road)) and propertystate='1'">
                        <SelectParameters>
                            <asp:ControlParameter ControlID="DropDownList_City" Name="City" 
                                PropertyName="SelectedValue" Type="String" />
                            <asp:ControlParameter ControlID="DropDownList_Road" Name="Road" 
                                PropertyName="SelectedValue" Type="String" />
                        </SelectParameters>
                    </asp:SqlDataSource>
                </td>
    

    ========================后台代码======================
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;
    
    public partial class ContractTable_ContractAdd : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
        protected void Button_Submit_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                DataClassesDataContext db = new DataClassesDataContext();
                ContractTable myct = new ContractTable();
                
                myct.ContractNumber = TextBox_ContractNumber.Text.ToString();//合同编号
                myct.ContractTypeDetail = TextBox_ContractTypeDetail.Text.ToString();//合同种类(详细)
                myct.ContractType = DropDownList_ContractType.SelectedItem.Value.ToString();//合同类型
                myct.SumbitNumber = TextBox_SubmitNumber.Text.ToString();//送审编号
                myct.SubjectMatter = TextBox_SubjectMatter.Text.ToString();//标的物
                
                //City、Road、Address为必填项
                myct.City = DropDownList_City.SelectedItem.Value.ToString();
                myct.Road = DropDownList_Road.SelectedItem.Value.ToString();
                myct.Address = DropDownList_Address.SelectedItem.Value.ToString();
    
                myct.OppositeSide = TextBox_OppositeSide.Text.ToString();//合同相对方
                myct.ManageProject = TextBox_ManageProject.Text.ToString();//经营项目
                if (TextBox_LeaseDateSign.Text!="")//合同签订日
                myct.LeaseDateSign = Convert .ToDateTime(TextBox_LeaseDateSign.Text);
                if (TextBox_LeaseDtaeFrom.Text!="")//合同起始日
                myct.LeaseDateFrom = Convert.ToDateTime(TextBox_LeaseDtaeFrom.Text);
                if (TextBox_LeaseDateTo.Text!="")//合同终止日
                myct.LeaseDateTo = Convert.ToDateTime(TextBox_LeaseDateTo.Text);
                myct.PerformState = TextBox_PerformState.Text.ToString();//合同状态
                //安全协议
                if (RadioButton_SafeContractYes.Checked )
                    myct .SafetyContract=true;
                if (RadioButton_SafetyContractNo.Checked )
                    myct .SafetyContract =false ;
                //计生协议
                if (RadioButton_FamilyPlanningContractYes.Checked)
                    myct.FamilyPlanningContract = true;
                if (RadioButton_FamilyPlanningContractNo.Checked)
                    myct .FamilyPlanningContract=false;
                //食品安全协议
                if (RadioButton_FoodContractYes.Checked)
                    myct.FoodContract = true;
                if (RadioButton_FoodContractNO.Checked)
                    myct.FoodContract = false;
                //添加了部门和人!!!
                myct.ContractCompany = TextBox_ContractCompany.Text.ToString();//合同签订分公司
                myct.ContractResponsible = TextBox_ContractResponsible.Text.ToString();//合同负责人
                myct.ContractManager = TextBox_ContractManager.Text.ToString();//合同管理员
                myct.ContractChange = TextBox_ContractChange.Text.ToString();//合同变更
                //租金相关
                if (TextBox_ReferencePrice.Text!="")//周边参考价
                myct.ReferencePrice = decimal .Parse ( TextBox_ReferencePrice.Text);
                myct.ReferencePriceRemarks = TextBox_ReferencePriceRemarks.Text.ToString();//参考价备注
                myct.ContractRemarks = TextBox_ContractRemarks.Text.ToString();//合同备注
                myct.TypeOfPayment = TextBox_TypeOfPayment.Text.ToString();//付款方式
                
                if (TextBox_MonthRent.Text != "")//理论月租金
                    myct.MonthRent = decimal.Parse(TextBox_MonthRent.Text);
                //if (TextBox_RealityRent.Text!="")//实收月租金
                //    myct.RealityRent = decimal.Parse(TextBox_RealityRent.Text);
                //if (TextBox_RealityYearRent.Text != "")//实收年租金
                //    myct.RealityYearRent = decimal.Parse(TextBox_RealityYearRent.Text);
                if (TextBox_YearRent.Text != "")//理论年租金
                    myct.YearRent = decimal.Parse(TextBox_YearRent .Text );
                if (TextBox_SumRent.Text!="")//理论租金总金额
                myct.SumRent = decimal.Parse(TextBox_SumRent.Text );
    
                if (TextBox_LeaseAssureMoney.Text!="")//租赁保证金
                myct.LeaseAssureMoney = decimal.Parse(TextBox_LeaseAssureMoney .Text );
                if (TextBox_PenalSum.Text != "")//违约金
                    myct.PenalSum = decimal.Parse(TextBox_PenalSum .Text .ToString ());
                if (TextBox_PropertyManageMoney.Text != "")//物业管理费
                    myct.PropertyManageMoney = decimal.Parse(TextBox_PropertyManageMoney.Text);
                if (TextBox_RateOfRise.Text!="")//递增率
                myct.RateOfRise = decimal.Parse(TextBox_RateOfRise .Text);
                db.ContractTable.InsertOnSubmit(myct);
                db.SubmitChanges();
                TextBox_ContractNumber.Focus();
                //清空
                TextBox_OppositeSide.Text = "";
                TextBox_ManageProject.Text = "";
                //TextBox_LeaseDateSign.Text = "";
    
                
            }
        }
    
        protected void CustomValidator_ContractNumber_ServerValidate(object source, ServerValidateEventArgs args)
        {
            DataClassesDataContext db = new DataClassesDataContext();
            ContractTable  mypt;
            args.IsValid = false;
            try//多个参数同时判定的写法!!!
            {
                mypt = db.ContractTable.Where(c => c.ContractNumber ==TextBox_ContractNumber.Text).First();
    
            }
            catch
            {
                args.IsValid = true;
            }
        }
    }
    
    



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


    2011年12月29日 5:16

答案

  • PropertyTable pt = new PropertyTable(); 这一句不要么?

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


    是的,不要

    因为是由DataClassesDataContext db = new DataClassesDataContext();
    去PropertyTable查询出PropertyTableID

    ====================

    刚刚想到,有可能使用者所选取的City 、Road、Address刚好不在PropertyTable里

    所以要做个防呆写法

     

                 DataClassesDataContext db = new DataClassesDataContext();
                 ContractTable myct = new ContractTable();
                 
                 //City、Road、Address为必填项
                     myct.City = DropDownList_City.SelectedItem.Value.ToString();
                 myct.Road = DropDownList_Road.SelectedItem.Value.ToString();
                 myct.Address = DropDownList_Address.SelectedItem.Value.ToString();
                 //由这三个讯息去PropertyTable(资产表)找出PropertyTableID
                 PropertyTable pt = db.PropertyTable.Where(c => c.City == DropDownList_City.SelectedItem.Value && c.Road == DropDownList_Road.SelectedItem.Value && c.Address == DropDownList_Address.SelectedItem.Value).FirstOrDefault();
                 if (pt.PropertyTableID==null)
                 {
                     ClientScript.RegisterStartupScript(typeof(Page), "无此地址", "alert('无此地址');", true);
                     return;//不往下执行
    
                     }
                 myct.ContractTableID = pt.PropertyTableID;
                 
    

     



    2011年12月29日 6:39

全部回复

  • 问题是:
        首先介绍一下表。有2个表:1.PropertyTable(资产表)、2.ContractTable(合同表)。以前两个表中都有City(所在城市)、Road(所在路段)、Address(门牌号),ContractTable中的City、Road、Address的外键是PropertyTable中的City、Road、Address(ContractTable中的City、Road、Address来源于PropertyTable)。
    --
        以前我是通过where ContractTable.City+ContractTable.Road+ContractTable.Address=PropertyTable.City+PropertyTable.Road+PropertyTable.Address的条件来联系两个表的,但这样在实际操作中比较麻烦。所以,我给PropertyTable添加了一个PropertyTableID,并把这个PropertyTableID设置为主键。然后我又给ContractTable添加了一个新的列ContractTableID,通过where ContractTable.City+ContractTable.Road+ContractTable.Address=PropertyTable.City+PropertyTable.Road+PropertyTable.Address的条件把PropertyTableID的值赋给ContractTableID,以后就可以用where ContractTable.ContractTableID=PropertyTable.PropertyTableID的条件来联系两个表了。
    --
        现在的问题是,我使用前台程序打开ContractTableAdd.aspx,添加新合同,怎么样可以在选择了City、Road、Address后,在点击‘确定’时自动在ContractTable中给添加的新合同增加相应的ContractTableID呢???
    --
        下面是前台和后台程序。我觉得应该是在后台添加吧!?请各位不吝解答!!!谢谢!

     

    给您一个思路:

                //City、Road、Address为必填项
                 DropDownList_City.SelectedItem.Value.ToString();
                 DropDownList_Road.SelectedItem.Value.ToString();
                 DropDownList_Address.SelectedItem.Value.ToString();

    由这三个讯息去PropertyTable(资产表)找出PropertyTableID

    再把PropertyTableID赋值给ContractTableID就可以了

     

     


    2011年12月29日 5:40
  • //City、Road、Address为必填项  这个没错!

    关键是我怎么写“由这三个讯息去PropertyTable(资产表)找出PropertyTableID”的代码。

    附带说一下,我用的是LinqToSQL!

    3Q!


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年12月29日 6:00
  • //City、Road、Address为必填项  这个没错!

    关键是我怎么写“由这三个讯息去PropertyTable(资产表)找出PropertyTableID”的代码。

    附带说一下,我用的是LinqToSQL


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


    Sample Code:

     DataClassesDataContext db = new DataClassesDataContext();
                 ContractTable myct = new ContractTable();
                 
                 //City、Road、Address为必填项
                     myct.City = DropDownList_City.SelectedItem.Value.ToString();
                 myct.Road = DropDownList_Road.SelectedItem.Value.ToString();
                 myct.Address = DropDownList_Address.SelectedItem.Value.ToString();
                 //由这三个讯息去PropertyTable(资产表)找出PropertyTableID
                 PropertyTable pt = db.PropertyTable.Where(c => c.City == DropDownList_City.SelectedItem.Value && c.Road == DropDownList_Road.SelectedItem.Value && c.Address == DropDownList_Address.SelectedItem.Value).FirstOrDefault();
                 myct.ContractTableID = pt.PropertyTableID;
    

     



    2011年12月29日 6:16
  • Sample Code:

     DataClassesDataContext db = new DataClassesDataContext();
                 ContractTable myct = new ContractTable();
                 
                 //City、Road、Address为必填项
                     myct.City = DropDownList_City.SelectedItem.Value.ToString();
                 myct.Road = DropDownList_Road.SelectedItem.Value.ToString();
                 myct.Address = DropDownList_Address.SelectedItem.Value.ToString();
                 //由这三个讯息去PropertyTable(资产表)找出PropertyTableID
                 PropertyTable pt = db.PropertyTable.Where(c => c.City == DropDownList_City.SelectedItem.Value && c.Road == DropDownList_Road.SelectedItem.Value && c.Address == DropDownList_Address.SelectedItem.Value).FirstOrDefault();
                 myct.ContractTableID = pt.PropertyTableID;
    

     

    PropertyTable pt = new PropertyTable(); 这一句不要么?

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年12月29日 6:25
  • PropertyTable pt = new PropertyTable(); 这一句不要么?

    不需要,看作者的代码——FirstOrDefault已经可以获取这个对应的实体类了。
       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年12月29日 6:35
  • PropertyTable pt = new PropertyTable(); 这一句不要么?

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


    是的,不要

    因为是由DataClassesDataContext db = new DataClassesDataContext();
    去PropertyTable查询出PropertyTableID

    ====================

    刚刚想到,有可能使用者所选取的City 、Road、Address刚好不在PropertyTable里

    所以要做个防呆写法

     

                 DataClassesDataContext db = new DataClassesDataContext();
                 ContractTable myct = new ContractTable();
                 
                 //City、Road、Address为必填项
                     myct.City = DropDownList_City.SelectedItem.Value.ToString();
                 myct.Road = DropDownList_Road.SelectedItem.Value.ToString();
                 myct.Address = DropDownList_Address.SelectedItem.Value.ToString();
                 //由这三个讯息去PropertyTable(资产表)找出PropertyTableID
                 PropertyTable pt = db.PropertyTable.Where(c => c.City == DropDownList_City.SelectedItem.Value && c.Road == DropDownList_Road.SelectedItem.Value && c.Address == DropDownList_Address.SelectedItem.Value).FirstOrDefault();
                 if (pt.PropertyTableID==null)
                 {
                     ClientScript.RegisterStartupScript(typeof(Page), "无此地址", "alert('无此地址');", true);
                     return;//不往下执行
    
                     }
                 myct.ContractTableID = pt.PropertyTableID;
                 
    

     



    2011年12月29日 6:39
  • 非常感谢!明天去单位测试了再回帖!3Q
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年12月29日 11:17