문제

내 ASP.NET 웹 응용 프로그램 중 하나에서 저는 BULKEDITGRIDVIEW (모든 행을 동시에 편집 할 수있는 gridview) 주문 양식을 구현하려면. 내 그리드에는 각 항목에 대한 총계 (비용 x 수량)와 페이지 하단에 총계 필드를 계산하는 열이 있습니다. 그러나 현재이 필드는 모든 사후 공간에서만 새로 고침됩니다. 사용자가 수량을 변경함에 따라 새로운 값을 반영하기 위해 총계 및 총계 업데이트를 변경하도록 이러한 필드를 동적으로 업데이트해야합니다. 나는 이것을 달성하기 위해 Ajax 솔루션을 사용하려고 시도했지만 비동기식 사후 백은 페이지에 초점을두고 있습니다. 순전히 고객 측 솔루션이 존재한다고 생각하며 커뮤니티의 누군가가 공유 할 수 있기를 바랍니다.

도움이 되었습니까?

해결책

JavaScript로 계산을 재현 할 수있는 경우 가장 쉬운 방법은 JQuery를 사용하여 다음과 같은 모든 항목을 얻는 것입니다.

$("#myGridView input[type='text']").each(function(){
  this.change(function(){
    updateTotal(this.value);
  });
});

또는 계산이 JavaScript로 수행하기에는 너무 복잡한 경우 (또는 시간 제한으로 인해 방해가되면) 웹 서비스에 대한 AJAX 호출이 가장 좋은 방법입니다. 다음과 같은 웹 서비스가 있다고 가정 해 봅시다.

[WebMethod, ScriptMethod]
public int UpdateTotal(int currTotal, int changedValue){
  // do stuff, then return
}

웹 서비스를 호출하려면 JavaScript가 필요합니다. jQuery 또는 MS Ajax로 수행 할 수 있습니다. 나는 재미를 위해 둘 다의 콤보를 보여줄 것이다.

$("#myGridView input[type='text']").each(function(){
  this.change(function(){
    Sys.Net.WebServiceProxy.invoke(
      "/Helpers.asmx",
      "UpdateTotal",
      false,
      { currTotal: $get('totalField').innerHTML, changedValue: this.value },
      showNewTotal
    );
  });
});

function showNewTotal(res){
  $get('totalField').innerHTML = res;
}

sys.net.webserviceproxy.invoke 메소드에 대한 전체 정보는이 링크를 확인하십시오. http://www.asp.net/ajax/documentation/live/clientreference/sys.net/webserviceproxyclass/webserviceproxyinvokemethod.aspx

다른 팁

한 가지 해결책은 텍스트 상자가 변경 될 때 총계를 지속적으로 업데이트하기 위해 RowDatabound Method에 일부 JavaScript를 구축하는 것입니다.

따라서 Databound에서 메모리에 JavaScript 문자열을 만들기 시작하여 추가해야 할 텍스트 상자가 추가됩니다. databound에서 좋은 점은 TextBox.ClientID를 호출 하여이 텍스트 상자의 클라이언트 측 ID를 얻을 수 있다는 것입니다. 이 JavaScript를 페이지에 추가 한 다음이 스크립트를 호출하는 데 필요한 각 텍스트 상자에 onkeyup 이벤트를 추가하십시오.

그래서와 같은 것 (이것은 그리드 뷰의 행 바운드 이벤트입니다)

private string _jscript;
protected void gridview_RowDataBound(object sender, GridViewRowEventArgs e)
{
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
      //Get your textbox
      Textbox tb = e.Row.FindControl("tbAddUp");
      //Add the event that you're going to call to this textbox's attributes
      tb.Attributes.Add("onkeyup", "MyAddUpJavaScriptMethod();");
      //Build the javascript for the MyAddUpJavaScriptMethod
      jscript += "document.getElementById('" + tb.ClientId + '").value + ";
   }
}

그런 다음 해당 스크립트를 구축 한 후에는 Page.Clientscript 클래스를 사용하여 텍스트 상자 "MyAddupjavaScriptMethod"에서 ONKeyUP에서 호출 할 메소드 페이지를 추가하십시오.

그것이 의미가 있고 도움이되기를 바랍니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top