2013-02-05 33 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; 

你試過這個嗎?