none
传参引发的众多问题(采用LINQTOSLQ)!!! RRS feed

  • 问题

  •     我使用SQL和ASP.NET(LINQTOSQL)做了一个收租金的数据库,包含多个表,其中一个是合同表,另一个是租金表。租金表中的合同号是依赖于合同表中的合同号而存在。一份合同一般是租2年,租金可以是按月收、按季度收或按年收,因此把租金表中的合同号和月份做成标识的主键,每次收了租金就写一行记录。
    -
    以下是合同表和租金表的具体设置:
    -1.ContractTable(合同表),包含ContractNumber(合同号、nvarchar(30))、City(所在城市)、Road(所在路段)、Address(门牌号)和其他字段。
    -
    -2.RentTable(租金表),包含ContractNumber(合同号、nvarchar(30))、Qizuri(出租起始日、date)、Yuefen(月份,date),Yingshou(应收、decimal(18,2))、Shishou(实收、decimal(18,2))。该表的标示为ContractNumber和Yuefen组成的联合主键。
        
        问题1:因为合同期限一般是2年,如果按月收租金的话那么我在《收租前台界面》上做24个月份、24个应收和24个实收的TextBox,但是假如合同有5年的话我就需要加更多的TextBox。有没有更好的办法?
    -
        问题2:填写RentTable的界面我选择用前页传参数的方式来写,也就是点击ContractTable的前台ContractNumber,跳转到RentTable上ContractNumber对应的全部记录。类似于:if (!IsPostBack)
            {
                string myConstractNumber = Request.QueryString["ContractNumber"].ToString();
                DataClassesDataContext db = new DataClassesDataContext();
                RentTable myRentTable = db.RentTable.Where(r => r.ContractNumber ==myConstractNumber ).First();
                    Label_ContractNumber.Text = myRentTable.ContractNumber.ToString();
                    Label_City.Text = myRentTable.City.ToString();
                    Label_Road.Text = myRentTable.Road.ToString();
    但是,上面这种写法一对一的跳转还可以,但ContractTable的前台ContractNumber跳转到RentTable后对应了许多行,大不一样了。我首先希望把RentTable中符合从ContractTable中传过来的ContractNumber的所有记录显示到《收租前台界面》,该怎么做?(假设《收租前台界面》上做24个月份、24个应收和24个实收的TextBox)
    -    
    问题3:通过《收租前台界面》往数据库里添加新纪录的代码应该怎么写?
       问题4:从ContractTable传过来的参数还有City、Road、Address,这些参数如何显示在《收租前台界面》上?
         我第一次接触这种问题,也没在书中看到过类似的例子!所以请大家帮帮我,尽量详细点。谢谢!

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

    2011年8月21日 8:52

答案

  • 看来您可能初次接触 ASP.NET。所以我给了几个简单的解决方案。

    1、批量产生 TextBox 的问题,可以利用 ASP.NET 的 Repeater 或者 DataList 等控件实现。具体实现方法请搜索 MSDN 或者其他网页。

    2、同样的道理,对于一对多的 Contract 和 Rent 记录,直接用 Linq 语句:

    IEnumerable<RentTable> rentalFees = myDataContext.RentTable.Where(item => item.ContractNumber.Equals(myContractNumber. StringComparison.InvariantCultureIgnoreCase));

    得到所有 Rent 记录的集合,然后利用 LinqDataSource 控件把数据绑定到 Repeater 或者 DataList 就可以了。

    3、利用 Linq to SQL 直接更新数据库,如:

    RentTable rt = new RentTable { ContractNumber = ..., StartDate = ... };
    myDataContext.RentTable.Add(rt);
    myDataContext.InsertOnSubmit();

    4、可以利用 Session,Cache,Application,ViewState 等状态提供器保存参数,然后在特定的地方读取他们并显示。这几种提供器的使用方法大同小异但是使用的范围完全不同,请参考 MSDN 以便获取更多信息。这里这种情况建议使用 Session 或者 ViewState。


    Mark Zhou
    2011年8月23日 6:42

全部回复

  • 这个是C#论坛,讨论专业的ASP.Net问题请到以下论坛试试:

    http://social.msdn.microsoft.com/Forums/zh-CN/295/threads

    http://forums.asp.net

    http://social.msdn.microsoft.com/Forums/zh-cn/linqtosql/threads

     


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年8月23日 6:17
    版主
  • Asp。Net的后台代码不是C#写的么???
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月23日 6:24
  • dear,

    研究的方向不同。虽说都是C#相关,但是相对于ASP.Net来说,前2个站点是比这个站点更专业点。而且里面会有更多这方面的专家帮助您的。

    我们也希望您的问题早日得到解决。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年8月23日 6:26
    版主
  • 看来您可能初次接触 ASP.NET。所以我给了几个简单的解决方案。

    1、批量产生 TextBox 的问题,可以利用 ASP.NET 的 Repeater 或者 DataList 等控件实现。具体实现方法请搜索 MSDN 或者其他网页。

    2、同样的道理,对于一对多的 Contract 和 Rent 记录,直接用 Linq 语句:

    IEnumerable<RentTable> rentalFees = myDataContext.RentTable.Where(item => item.ContractNumber.Equals(myContractNumber. StringComparison.InvariantCultureIgnoreCase));

    得到所有 Rent 记录的集合,然后利用 LinqDataSource 控件把数据绑定到 Repeater 或者 DataList 就可以了。

    3、利用 Linq to SQL 直接更新数据库,如:

    RentTable rt = new RentTable { ContractNumber = ..., StartDate = ... };
    myDataContext.RentTable.Add(rt);
    myDataContext.InsertOnSubmit();

    4、可以利用 Session,Cache,Application,ViewState 等状态提供器保存参数,然后在特定的地方读取他们并显示。这几种提供器的使用方法大同小异但是使用的范围完全不同,请参考 MSDN 以便获取更多信息。这里这种情况建议使用 Session 或者 ViewState。


    Mark Zhou
    2011年8月23日 6:42