2017-02-02 14 views
0

以下のコードは、GridViewフッター内にあるボタンをクリックするとGridViewで行を生成します。GridViewのポストバック後にJavascriptコードが実行されない

私は、合計金額と正味合計を得るためにグリッドビューで何らかの計算を行うためにJavaScriptを使用しました。

しかし、グリッドに新しい行を追加すると、グリッドビューから計算された値が消えてしまうという問題があります。

行を追加する前に。行を追加した後

enter image description here

。あなたが手動でポストバック後のUpdatePanel内の要素にリスナーをバインドするJavaScriptコードを実行する必要が enter image description here

のJavaScriptコード

$(document).ready(function() { 
     function multInputs() { 
      var $mult = 0; 
      var $multNet = 0; 
      var $multGrand = 0; 
      $("tr.txtMult").each(function() { 
       var $UnitPrice = $('.UnitPrice', this).val(); 
       var $Quantity = $('.Quantity', this).val(); 
       var $Discount = $('.Discount', this).val(); 
       var $total = (($UnitPrice) * ($Quantity)); 
       var $Nettotal = (($UnitPrice) * ($Quantity) - ($Discount) * ($Quantity)); 

       $mult += $total; 
       $multNet += $Nettotal; 
      }); 

      $("tr.txtMult").each(function() { 
       var $UnitPrice = $('.UnitPrice', this).val(); 
       var $Quantity = $('.Quantity', this).val(); 
       var $Discount = $('.Discount', this).val(); 
       var $total = (($UnitPrice) * ($Quantity)); 
       var $Nettotal = (($UnitPrice) * ($Quantity) - ($Discount) * ($Quantity)); 

       $('.multTotal', this).text(parseFloat($total).toFixed(2)); 
       $('.multNet', this).text(parseFloat($Nettotal).toFixed(2)); 

      }); 
      $(".lblGrandAmount").text(parseFloat($mult).toFixed(2)); 
      $(".lblNetTotal").text(parseFloat($multNet).toFixed(2)); 
     }       

    $(".txtMult input").on('keyup mouseup', multInputs); 
    function multInputs() { 
     var $mult = 0; 
     var $multNet = 0; 
     var $multGrand = 0; 
     $("tr.txtMult").each(function() { 
      var $UnitPrice = $('.UnitPrice', this).val(); 
      var $Quantity = $('.Quantity', this).val(); 
      var $Discount = $('.Discount', this).val(); 
      var $total = (($UnitPrice) * ($Quantity)); 
      var $Nettotal = (($UnitPrice) * ($Quantity) - ($Discount) * ($Quantity)); 

      $mult += $total; 
      $multNet += $Nettotal; 

     }); 

     $("tr.txtMult").each(function() { 
      var $UnitPrice = $('.UnitPrice', this).val(); 
      var $Quantity = $('.Quantity', this).val(); 
      var $Discount = $('.Discount', this).val(); 
      var $total = (($UnitPrice) * ($Quantity)); 
      var $Nettotal = (($UnitPrice) * ($Quantity) - ($Discount) * ($Quantity)); 

      $('.multTotal', this).text(parseFloat($total).toFixed(2)); 
      $('.multNet', this).text(parseFloat($Nettotal).toFixed(2)); 

     }); 
     $(".lblGrandAmount").text(parseFloat($mult).toFixed(2)); 
     $(".lblNetTotal").text(parseFloat($multNet).toFixed(2)); 

    } 
}); 

C#コード

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      SetInitialRow(); 
     } 
    } 

protected void griditem_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      e.Row.CssClass = "txtMult"; 
     }  
    } 


    protected void ButtonAdd_Click(object sender, EventArgs e) 
    { 
     AddNewRowToGrid(); 
    } 

    private void AddNewRowToGrid() 
    { 
     int rowIndex = 0; 

     if (ViewState["CurrentTable"] != null) 
     { 
      DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"]; 
      DataRow drCurrentRow = null; 
      if (dtCurrentTable.Rows.Count > 0) 
      { 
       for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) 
       { 
        //extract the TextBox values 
        DropDownList dllitem = (DropDownList)griditem.Rows[rowIndex].Cells[1].FindControl("dllitem"); 
        TextBox txtUnitprice = (TextBox)griditem.Rows[rowIndex].Cells[2].FindControl("txtUnitprice"); 
        TextBox txtDiscount = (TextBox)griditem.Rows[rowIndex].Cells[3].FindControl("txtDiscount"); 
        TextBox txtQuantity = (TextBox)griditem.Rows[rowIndex].Cells[4].FindControl("txtQuantity"); 
        Label lblTotal = (Label)griditem.Rows[rowIndex].Cells[5].FindControl("lblTotal"); 
        Label lblnet = (Label)griditem.Rows[rowIndex].Cells[6].FindControl("lblnet"); 

        drCurrentRow = dtCurrentTable.NewRow(); 
        drCurrentRow["Sr.No"] = i + 1; 

        dtCurrentTable.Rows[i - 1]["Column1"] = dllitem.SelectedValue; 
        dtCurrentTable.Rows[i - 1]["Column2"] = txtUnitprice.Text; 
        dtCurrentTable.Rows[i - 1]["Column3"] = txtDiscount.Text; 
        dtCurrentTable.Rows[i - 1]["Column4"] = txtQuantity.Text; 
        dtCurrentTable.Rows[i - 1]["Column5"] = lblTotal.Text; 
        dtCurrentTable.Rows[i - 1]["Column6"] = lblnet.Text; 


        rowIndex++; 
       } 
       dtCurrentTable.Rows.Add(drCurrentRow); 
       ViewState["CurrentTable"] = dtCurrentTable; 

       griditem.DataSource = dtCurrentTable; 
       griditem.DataBind(); 
      } 
     } 
     else 
     { 
      Response.Write("ViewState is null"); 
     } 

     //Set Previous Data on Postbacks 
     SetPreviousData(); 
    } 

    private void SetPreviousData() 
    { 
     int rowIndex = 0; 
     if (ViewState["CurrentTable"] != null) 
     { 
      DataTable dt = (DataTable)ViewState["CurrentTable"]; 
      if (dt.Rows.Count > 0) 
      { 
       for (int i = 0; i < dt.Rows.Count; i++) 
       { 
        DropDownList dllitem = (DropDownList)griditem.Rows[rowIndex].Cells[1].FindControl("dllitem"); 
        TextBox txtUnitprice = (TextBox)griditem.Rows[rowIndex].Cells[2].FindControl("txtUnitprice"); 
        TextBox txtDiscount = (TextBox)griditem.Rows[rowIndex].Cells[3].FindControl("txtDiscount"); 
        TextBox txtQuantity = (TextBox)griditem.Rows[rowIndex].Cells[4].FindControl("txtQuantity"); 
        Label lblTotal = (Label)griditem.Rows[rowIndex].Cells[5].FindControl("lblTotal"); 
        Label lblnet = (Label)griditem.Rows[rowIndex].Cells[6].FindControl("lblnet"); 

        dllitem.SelectedValue = dt.Rows[i]["Column1"].ToString(); 
        txtUnitprice.Text = dt.Rows[i]["Column2"].ToString(); 
        txtDiscount.Text = dt.Rows[i]["Column3"].ToString(); 
        txtQuantity.Text = dt.Rows[i]["Column4"].ToString(); 
        lblTotal.Text = dt.Rows[i]["Column5"].ToString(); 
        lblnet.Text = dt.Rows[i]["Column6"].ToString(); 

        rowIndex++; 
       } 
      } 
     } 
    }  

    private void SetInitialRow() 
    { 
     DataTable dt = new DataTable(); 
     DataRow dr = null; 
     dt.Columns.Add(new DataColumn("Sr.No", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column1", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column2", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column3", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column4", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column5", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column6", typeof(string))); 

     dr = dt.NewRow(); 
     dr["Sr.No"] = 1; 
     dr["Column1"] = string.Empty; 
     dr["Column2"] = string.Empty; 
     dr["Column3"] = string.Empty; 
     dr["Column4"] = string.Empty; 
     dr["Column5"] = string.Empty; 
     dr["Column6"] = string.Empty; 

     dt.Rows.Add(dr); 

     //Store the DataTable in ViewState 
     ViewState["CurrentTable"] = dt; 

     griditem.DataSource = dt; 
     griditem.DataBind(); 
    } 
+0

ページがあなたのViewStateにないすべてのものを失うので、なぜあなたはtxtMult_keyUpに接続されたサーバ側のメソッドを使用してmultInputs機能を置き換えるものではありません、再ロードされButtonAddをクリックしてください ? – Alessandro

+0

あなたは 'UpdatePanel'を使用していますか? – VDWWD

+0

はい私はUpdatePanelを使用しています – Ayman

答えて

0

。したがって、必要なときにすぐに呼び出せるjavascript関数を作成します。

<script type="text/javascript"> 
    $(document).ready(function() { 
     doDefaultStuff(); 
    }); 

    function doDefaultStuff() { 
     //all the javascript that you would normally put in document ready 
    }   
</script> 

コードビハインドでは、PostBackメソッドでjavascript関数を呼び出します。

protected void Button1_Click(object sender, EventArgs e) 
{ 
    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "doDefaultStuff", "doDefaultStuff();", true); 
} 
0

部分的なポストバックの後で計算を再度開始する必要があります。これは、まずすべての計算スクリプトを関数にラップすることによって実行できます。次に、ドキュメントの読み込みと部分的なポストバックに対してこの関数を呼び出します。

​​
関連する問題