2013-02-05 32 views
0

我正在ASP.NET c#中使用gridview。在gridview中如果有4个文本框,其中JavaScript查找月份差异并用另一个值计算

1st field - hire/month 
2nd field - from date 
3rd field - to date 
4th field - required machine month 

这个概念是这样工作的。

from_date和to_date之间的差异应以月为单位,并且应该乘以hire/month以获得required_machine_month字段。请帮助我。

我不知道JavaScript,尽管我通过在一个函数中获得差异并将函数调用到另一个函数并将其乘以获得输出来尝试获得最佳效果。

但JavaScript完全失败,似乎并没有工作。请给我一个好脚本。

回答

0

感谢您的帮助..最后我得到了脚本的工作。但是它很长。我将其张贴在下面供任何人使用。如果有人不清楚。请随时提问,以便我可以告诉我做了什么。

<script type="text/javascript" language="javascript"> 

function req_mac_month(numbers,fromDate,toDate,mcMonth) 
{ 
    //alert("Executed"); 
    var reqnum=document.getElementById(numbers).value; 
    var sdate=document.getElementById(fromDate).value; 
    var edate=document.getElementById(toDate).value; 
    //var diff=DisplayTo.getMonth() - DisplayFrom.getMonth() + (12 * (DisplayTo.getFullYear() - DisplayFrom.getFullYear())); 
    //var diff=Math.ceil((DisplayTo.getTime()-DisplayFrom.getTime())/(1000*60*60*24)); 
    var day1, day2; 
    var month1, month2; 
    var year1, year2; 
    //var noofmonths; 
    day1 = sdate.substring(0, sdate.indexOf("-")); 
    month1 = sdate.substring(sdate.indexOf("-") + 1, sdate.lastIndexOf("-")); 
    year1 = sdate.substring(sdate.lastIndexOf("-") + 1, sdate.length); 

    day2 = edate.substring(0, edate.indexOf("-")); 
    month2 = edate.substring(edate.indexOf("-") + 1, edate.lastIndexOf("-")); 
    year2 = edate.substring(edate.lastIndexOf("-") + 1, edate.length); 

    date1 = year1 + "/" + month1 + "/" + day1; 
    date2 = year2 + "/" + month2 + "/" + day2; 

    firstDate = Date.parse(date1) 
    secondDate = Date.parse(date2) 

    msPerDay = 24 * 60 * 60 * 1000 

    dbd = trunc(((Math.round(((secondDate.valueOf() - firstDate.valueOf())/msPerDay) + 1))/30),4); 
      reqmcmonthtotal = dbd * reqnum ; 
      document.getElementById(mcMonth).value= reqmcmonthtotal; 
    return true;  
} 
</script> 

在后面的代码......,

TextBox rnum = grvps.FooterRow.FindControl("Ftxteditreqnum") as TextBox; 
TextBox fromDate = grvps.FooterRow.FindControl("txtFromDate") as TextBox; 
TextBox toDate = grvps.FooterRow.FindControl("txtEndDate") as TextBox; 
TextBox mcMonth = grvps.FooterRow.FindControl("Ftxteditreqmcmth") as TextBox; 

string req_mac_month = string.Format("return req_mac_month('{0}','{1}','{2}','{3}');", rnum.ClientID, fromDate.ClientID, toDate.ClientID, mcMonth.ClientID); 
rnum.Attributes.Add("onchange", req_mac_month); 
fromDate.Attributes.Add("onchange", req_mac_month); 
toDate.Attributes.Add("onchange", req_mac_month); 
0

您可以在您的类中创建一个返回计算值并将该属性放入网格中的属性,因此不需要Javascript。这样的:

public string RequiredMachineMonth 
    { 
     get 
     { 
      return ... //Your logic based on 'to' and 'from' here 
     } 
    } 
+0

我能做到这一点,但序输入的值时,立即表现出来,我必须这样做,在JavaScript。 – user1613212

+0

对不起,我误解了问题,我会尽快发布答案。 –

+0

好的朋友。谢谢.. – user1613212

0

您可以使用jQuery作为一种简单的方法来做到这一点,如果你在网使用的TemplateField,给你的文本框class属性是这样的:

<asp:TemplateField> 
    <ItemTemplate> 
     <input type="text" class="to-date"/> 
    <ItemTemplate> 
</asp:TemplateField> 

,并假设你已经给出了这样类:hire-month',最新,从最新, required`然后使用类似的东西在jQuery的

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('.to-date, .from-date').change(function(){ 
      var required = $(this).parent().children('.required'); 
      var toDate = $(this).parent().children('.to-date').val(); 
      var fromDate = $(this).parent().children('.from-date').val(); 
      required.val(toDate + fromDate); //put your logic here 
     }); 
    }); 
</script> 
+0

我你不使用jquery,我不擅长纯javascript。我高度推荐jQuery,它有一个丰富的生态系统,有成千上万的插件,它使得JavaScript编程与DOM结构,因为你需要非常容易和快速。 –

+0

Javascript不是jQuery。 –

+0

你的意思是jquery不是javascript?:D –

0
var DisplayTo = new Date(); 
var DisplayFrom = new Date("2012-03-05"); 

var diff = DisplayTo.getMonth() - DisplayFrom.getMonth() + (12 * (DisplayTo.getFullYear() - DisplayFrom.getFullYear())); 
var machineMonth = hiremonth * diff; 

你试过这个吗?