2013-05-21 4 views
2

먼저, 화면에 나타나는 예외를 설명해 드리겠습니다. 내가 페이지 "A"에 가서 페이지 "B"로 변경 한 다음 백 스페이스 (그래서 내가 마지막 페이지로 이동), 내가 얻을 명중 할 때선언없이 트리거되는 이벤트

The control 'Store1' does not have an DirectEvent with the name 'DataChanged' or the handler is absent 

나는 내 프로젝트의 일부 페이지가 그 오류. 그러나 페이지 "B"로 가서 "A"로 다시 변경하면 오류가 발생하지 않습니다.

오류가 발생하면 내가 추가 한 열이 없으며 페이지가 포스트 백이 아닌 경우 ext.Store에 바인딩되기 때문에 경과 된 값을 볼 수 없습니다.

자,이는 ext.Store을 보유하고있는 그리드입니다 :

<ext:GridPanel id="GridPanel1" idmode="Explicit" runat="server" autoheight="true" 
     title="Solicitações" autoexpandcolumn="Descricao"> 
     <Store> 
      <ext:Store ID="Store1" runat="server" GroupField="solCodigo" GroupOnSort="true"> 
       <Reader> 
        <ext:JsonReader IDProperty="solCodigo"> 
         <Fields> 
          <ext:RecordField Name="solCodigo" SortDir="DESC" /> 
          <ext:RecordField Name="solDescricao" Type="String" /> 
          <ext:RecordField Name="solStatus" Type="String" /> 
          <ext:RecordField Name="proDescricao" Type="String" /> 
          <ext:RecordField Name="solDataSolicitacao" Type="Date" /> 
          <ext:RecordField Name="solDataPrevista" Type="Date" /> 
          <ext:RecordField Name="solNumArquivos" /> 
          <ext:RecordField Name="funNomeSolucionador" Type="String" /> 
          <ext:RecordField Name="solPrioridade" /> 
          <ext:RecordField Name="solDataSolucao" Type="String" /> 
         </Fields> 
        </ext:JsonReader> 
       </Reader> 
      </ext:Store> 
     </Store> 
     <View> 
      <%-- 
      <ext:GroupingView runat="server" HideGroupedColumn="true" EmptyGroupText="Indefinido" ID="groupingView1" EnableGrouping="false" EnableGroupingMenu="false"> 
       <GetRowClass Fn="getRowClass" /> 
      </ext:GroupingView>--%> 
     </View> 
     <ColumnModel runat="server"> 
      <Columns> 
       <ext:Column DataIndex="solCodigo" Header="Código" Width="40"> 
       </ext:Column> 
       <ext:Column ColumnID="Descricao" Header="Descrição" DataIndex="solDescricao"> 
        <Renderer Format="Ellipsis" FormatArgs="50" /> 
        <Commands> 
         <ext:ImageCommand CommandName="Comando" /> 
        </Commands> 
        <PrepareCommand Fn="prepareCellCommand" /> 
       </ext:Column> 
       <ext:DateColumn Header="Solicitado em" DataIndex="solDataSolicitacao"> 
       </ext:DateColumn> 
       <ext:DateColumn Header="Data prevista" DataIndex="solDataPrevista"> 
       </ext:DateColumn> 
       <ext:Column ColumnID="Projeto" Header="Projeto" DataIndex="proDescricao"> 
       </ext:Column> 
       <ext:Column Header="Situação" DataIndex="solStatus"> 
        <Renderer Fn="situacaoRender" /> 
       </ext:Column> 
       <ext:Column Header="Data de Solução" DataIndex="solDataSolucao"> 
       </ext:Column> 
       <ext:Column Header="Prioridade" DataIndex="solPrioridade"> 
        <Renderer Fn="prioridadeRender" /> 
       </ext:Column> 
      </Columns> 
     </ColumnModel> 
     <DirectEvents> 
      <DblClick OnEvent="GridPanel1_DblClick" Before="if(#{GridPanel1}.getSelectionModel().getSelected() == undefined) return false; "> 
       <EventMask ShowMask="true" /> 
       <ExtraParams> 
        <%-- or can use params[2].id as value --%> 
        <%-- <ext:Parameter Name="id" Value="#{GridPanel1}.getSelectionModel().getSelected().id;" 
         Mode="Raw" />--%> 
        <ext:Parameter Name="Values" Value="Ext.encode(#{GridPanel1}.getRowsValues({selectedOnly:true}))" 
         Mode="Raw" /> 
       </ExtraParams> 
      </DblClick> 
     </DirectEvents> 
     <Plugins> 
      <%-- <ext:RowExpander ID="RowExpander1" runat="server" > 
       <Template ID="Template1" runat="server"> 
        <Html> 
         <p><b>Detalhes:</b> {solDescricao}</p> 
         <p><b>Arquivos:</b> {solNumArquivos}</p> 
        </Html> 
       </Template> 
      </ext:RowExpander>--%> 
     </Plugins> 
     <SelectionModel> 
      <ext:RowSelectionModel runat="server" SingleSelect="true" /> 
     </SelectionModel> 
    </ext:GridPanel> 

는 그리고 사전에

DataTable dtSol = new DataTable(); 
       dtSol = sol.Listar(); 
       DataTable dtResult = new DataTable(); 
       dtResult.Columns.Add("solCodigo", typeof(int)); 
       dtResult.Columns.Add("solDescricao", typeof(string)); 
       dtResult.Columns.Add("solDataSolicitacao", typeof(DateTime)); 
       dtResult.Columns.Add("solDataPrevista", typeof(DateTime)); 
       dtResult.Columns.Add("proDescricao", typeof(string)); 
       dtResult.Columns.Add("solStatus", typeof(string)); 
       dtResult.Columns.Add("solPrioridade", typeof(int)); 
       dtResult.Columns.Add("solDataSolucao", typeof(string)); 

       var result = from r in dtSol.AsEnumerable() 
          select dtResult.LoadDataRow(new object[] 
          { 
           r.Field<int>("solCodigo"), 
           r.Field<string>("solDescricao"), 
           r.Field<DateTime>("solDataSolicitacao"), 
           r.Field<DateTime>("solDataPrevista"), 
           r.Field<string>("proDescricao"), 
           r.Field<string>("solStatus"), 
           r.Field<int>("solPrioridade"), 
           r.Field<DateTime>("solDataSolucao") > DateTime.Now.AddMinutes(1) ? string.Empty : r.Field<DateTime>("solDataSolucao").ToString("dd/MM/yyyy") 
          }, false); 

       this.Store1.DataSource = result.ToList().Any() ? dtResult : new DataTable(); 

       this.Store1.DataBind(); 

감사를 결합하는 방법.

편집 사용자 요청

protected void GridPanel1_DblClick(object sender, DirectEventArgs e) 
     { 
      //string ID = e.ExtraParams["id"]; 
      string json = e.ExtraParams["Values"]; 

      json = json.Replace("solNumArquivos\":\"\"", "solNumArquivos\":0"); 

      clSolicitacao sol = JSON.Deserialize<List<clSolicitacao>>(json).First(); 
      if (sol.solStatus == "DF") 
      { 
       Response.Redirect("Chamado.aspx?codigo=" + sol.solCodigo); 
      } 
      else 
      { 
       Response.Redirect("ExibirChamado.aspx?codigo=" + sol.solCodigo); 
      } 


     } 

EDIT 2

Ext.onReady(function(){Ext.QuickTips.init();Ext.apply(Ext.net.DirectMethods, { EfetuaLogout:function(blnLogout,config){Ext.net.DirectMethod.request("EfetuaLogout",Ext.applyIf(config || {}, {params:{blnLogout:blnLogout}}));} });new Ext.net.LinkButton({id:"menuBuscar",labelAlign:"top",renderTo:"menuBuscar_Container",width:50,arrowAlign:"bottom",iconAlign:"top",iconCls:"icon-magnifier",menu:{id:"ctl00",xtype:"menu",width:140,items:[{id:"ctl01",xtype:"menutextitem",text:"Código:"},{id:"txtBusca",xtype:"textfield",autoCreate:{"tag":"input","type":"text","maxlength":7,"autocomplete":"off"},maxLength:7,directEvents:{specialkey:{fn:function(el,e){var params=arguments;Ext.net.DirectEvent.confirmRequest({formProxyArg:"Form1",eventMask:{showMask:true,msg:"Buscando solicitações..."},before:function(el, type, action, extraParams){return e.getKey() == Ext.EventObject.ENTER;},control:this,action:'SpecialKey'});},delay:20}}},{id:"ctl02",iconCls:"icon-magnifier",text:"Buscar",directEvents:{click:{fn:function(el,e){var params=arguments;Ext.net.DirectEvent.confirmRequest({formProxyArg:"Form1",eventMask:{showMask:true,msg:"Buscando solicitações..."},control:this});},delay:20}}}]},text:"Buscar solicitação"});new Ext.net.GridPanel({store:this.Store1=new Ext.ux.data.PagingStore({proxyId:"Store1",autoLoad:true,reader:new Ext.data.JsonReader({fields:[{name:"solCodigo",sortDir:"DESC"},{name:"solDescricao",type:"string"},{name:"solStatus",type:"string"},{name:"proDescricao",type:"string"},{name:"solDataSolicitacao",type:"date",dateFormat:"Y-m-dTh:i:s"},{name:"solDataPrevista",type:"date",dateFormat:"Y-m-dTh:i:s"},{name:"solNumArquivos"},{name:"funNomeSolucionador",type:"string"},{name:"solPrioridade"}],idProperty:"solCodigo"}),directEventConfig:{formProxyArg:"Form1"},groupField:"solCodigo",groupOnSort:true,proxy:new Ext.data.PagingMemoryProxy([{"solCodigo":2213,"solDataSolicitacao":"2013-04-16T11:16:23","solDataPrevista":"2013-04-17T11:16:23","solPrioridade":3,"solDescricao":"Gostaria de ter acesso a base dbCOEServiceDesk do servidor BRSPTP09.\r\n\r\nO motivo do pedido &#233; para poder aplicar testes e implementar o pr&#243;prio sistema do ServiceDesk assim como foi relatado nas pend&#234;ncias relatadas pelo Silva, Paulo Roberto da.\r\n\r\nO usu&#225;rio para qual o acesso &#233; solicitado &#233; &quot; aseixas &quot;. O mesmo do solicitante deste chamado.\r\n\r\nGrato.","solStatus":"SP","proDescricao":"CrCt(Petrobrás) - SP","funNomeSolucionador":"DANIELA BRITO COSTA        ","solNumArquivos":0},{"solCodigo":2214,"solDataSolicitacao":"2013-05-10T15:33:11","solDataPrevista":"2013-05-11T15:33:11","solPrioridade":3,"solDescricao":"sdfgdf","solStatus":"SF","proDescricao":"Consiste","funNomeSolucionador":"ANDRE SILVA DE SEIXAS        ","solNumArquivos":0},{"solCodigo":2215,"solDataSolicitacao":"2013-05-13T13:43:34","solDataPrevista":"2013-05-14T13:43:34","solPrioridade":3,"solDescricao":"abc","solStatus":"SP","proDescricao":null,"funNomeSolucionador":null,"solNumArquivos":0},{"solCodigo":2216,"solDataSolicitacao":"2013-05-13T13:45:06","solDataPrevista":"2013-05-14T13:45:06","solPrioridade":3,"solDescricao":"abc","solStatus":"SP","proDescricao":null,"funNomeSolucionador":null,"solNumArquivos":0},{"solCodigo":2217,"solDataSolicitacao":"2013-05-13T13:47:01","solDataPrevista":"2013-05-14T13:47:01","solPrioridade":3,"solDescricao":"abc","solStatus":"SP","proDescricao":null,"funNomeSolucionador":null,"solNumArquivos":0},{"solCodigo":2218,"solDataSolicitacao":"2013-05-13T13:52:43","solDataPrevista":"2013-05-14T13:52:43","solPrioridade":3,"solDescricao":"asdf","solStatus":"SP","proDescricao":"Connector","funNomeSolucionador":null,"solNumArquivos":0},{"solCodigo":2219,"solDataSolicitacao":"2013-05-13T13:56:17","solDataPrevista":"2013-05-14T13:56:17","solPrioridade":3,"solDescricao":"asd","solStatus":"SP","proDescricao":"Connector","funNomeSolucionador":null,"solNumArquivos":0}], false),directEvents:{datachanged:{fn:function(store){var params=arguments;Ext.net.DirectEvent.confirmRequest({formProxyArg:"Form1",control:this,action:'DataChanged'});},delay:20}}}),id:"GridPanel1",renderTo:"GridPanel1_Container",autoHeight:true,title:"Solicitações",autoExpandColumn:"Descricao",sm:this.ContentPlaceHolder1_ctl00=new Ext.grid.RowSelectionModel({proxyId:"",singleSelect:true}),selectionMemory:false,cm:this.ContentPlaceHolder1_ctl01=new Ext.grid.ColumnModel({proxyId:"",defaultSortable:true,columns:[{dataIndex:"solCodigo",header:"Código",width:40},{dataIndex:"solDescricao",header:"Descrição",id:"Descricao",renderer:function(value){return Ext.util.Format.ellipsis(value,50);},commands:[{command:"Comando"}],isCellCommand:true,prepareCommand:prepareCellCommand},{dataIndex:"solDataSolicitacao",header:"Solicitado em",xtype:"datecolumn",format:"d/m/Y"},{dataIndex:"solDataPrevista",header:"Data prevista",xtype:"datecolumn",format:"d/m/Y"},{dataIndex:"proDescricao",header:"Projeto",id:"Projeto"},{dataIndex:"solStatus",header:"Situação",renderer:situacaoRender},{dataIndex:"solPrioridade",header:"Prioridade",renderer:prioridadeRender}]}),directEvents:{dblclick:{fn:function(e){var params=arguments;Ext.net.DirectEvent.confirmRequest({formProxyArg:"Form1",extraParams:{Values:Ext.encode(GridPanel1.getRowsValues({selectedOnly:true}))},eventMask:{showMask:true},before:function(el, type, action, extraParams){if(GridPanel1.getSelectionModel().getSelected() == undefined) return false; },control:this,action:'DblClick'});},delay:20}}});new Ext.Window({id:"wndChromeWarning",hidden:true,renderTo:Ext.get("Form1"),height:220,width:400,closable:false,buttons:[{id:"ctl03",xtype:"button",text:"Fechar aviso",listeners:{click:{fn:function(el,e){wndChromeWarning.hide()}}}}],header:false,padding:25,contentEl:"wndChromeWarning_Content",modal:true});});Ext.net.ResourceMgr.init({id:"ctl00$ResourceManager1",BLANK_IMAGE_URL:"/extjs/resources/images/gray/s-gif/ext.axd",aspForm:"Form1"}); 
+0

'GridPanel1_DblClick'에 대해 선언 된 이벤트 핸들러가 있습니까? 그렇다면 게시 할 수 있습니까? –

+0

요청한 이벤트로 내 질문을 편집했습니다. –

+0

이것은 다소 까다 롭지 만 페이지 'A'로 돌아 가면 프로그램이 'DataChanged' 이벤트에 대한 핸들러를 찾으려고합니다. 어둠 속에서 합계가 생겼다 ... 어쩌면 그 이벤트를'DirectEvents' 요소에 추가하려고 시도했을까요? –

답변

1

이 사람은 조금 까다 롭습니다,하지만 난 의심 당신은 다시 'A'페이지로 이동되는 경우, 프로그램이 DataChanged 이벤트에 대한 처리기를 찾으려고합니다. 어둠 속에서 총계가 ... 어쩌면 그 이벤트를 DirectEvents 요소에 추가해보십시오.

참고 : OP의 요청에 답변으로 게시하고 있습니다. 그것은 코멘트에 orginally했다.

+0

다른 답변이 없으면 내일까지 답변으로 표시하겠습니다. 그것이 가능한 해결책이기 때문에 Upvoted. –

1

당신이 추가하는 것이 추측 할 수있다 (곳은?) 뒤에있는 코드에서 직접 이벤트 핸들러를 DataChanged 및 자원 관리자가 요청 직접 이벤트 요청이 있음을 감지 한 경우 그 예외가 발생 다음 요청

동안 그 핸들러를 다시 추가하지 않습니다 위젯에는 이벤트에 대한 핸들러가 없습니다.

문제 페이지에 대해 생성 된 자바 스크립트 코드를 게시 할 수 있습니까?

+0

전체 솔루션에는 DataChanged라는 이름이 없습니다. 나는 그것을 내일 추가 할 것이다. 지금은 직장에 없다. –

+0

요청에 따라 수정되었습니다. DataChanged를 호출하는 곳이 있지만 어디에도 선언하지 않습니다. –

+0

글쎄, 내가 직접 생성 된 스크립트에서 직접 이벤트를 datachanged지만 직접 이벤트 자체로 추가 할 수 없습니다. 한 페이지로만 간단한 응용 프로그램에서 문제를 재현 할 수 있습니까? 또한 StoreDirectEvents 클래스의 DataChanged 속성의 getter에 중단 점을 설정하여 처리기가 설정된 위치를 확인 할 수 있습니다 – vladsch

관련 문제