2013-06-21 4 views
1

ASP.NET 응용 프로그램에는 코드 뒤에 정의 된 리스너가있는 격자 패널이 있습니다. 발생한 문제는 mousedown 이벤트와 관련이 있습니다. mousedown에서 나중에 약간의 처리로 인해 행이 선택됩니다.EXT.NET 이벤트 처리 문제

C 번호 :

Ext.Net.ConfigItem cItem = new Ext.Net.ConfigItem(); 
cItem.Mode = Ext.Net.ParameterMode.Raw; 
cItem.Name = "listeners"; 
cItem.Value += "{'mousedown':function(e){ if(e.target != null) setGridCurrentRow(" + gridView.ID + ",e);}}"; 
... 

에서 자바 스크립트 : 그리드 행의 콤보를 클릭하면

function setGridCurrentRow(grid, e) { 

    var parent = Ext.fly(e.target).findParent(grid.getView().rowSelector, grid.getView().rowSelectorDepth); 

    if (parent) {  // if no row selected 
     grid.currentRow = grid.store.getRange()[parent.rowIndex].data; 
    } 
    else {    // else - row selected 
     grid.currentRow = grid.getRowsValues()[0]; 
    } 

문제가 발생 여기에 코드입니다. 행이 선택됩니다. 괜찮습니다. 그러나 콤보 값은 표시되지 않습니다. 콤보 (현재 그리드 행에 표시된 값)에 하나의 값만있는 것처럼 보입니다.

enter image description here

키보드를 사용하여 탐색 할 때, 콤보가 열리고 모든 값이 표시됩니다.

enter image description here

그것은 보인다 그리드 행 재정 콤보의 mousedown 이벤트에 MouseDown 이벤트. 내 질문은 : 기본 콤보 동작을 잃지 않고 행을 선택하는 방법은 무엇입니까?

편집 :

grid.getRowsValues()[0]; 

그렇게하지 :

<%@ Page Language="C#" AutoEventWireup="true" %> 

<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script type="text/javascript"> 
    function setGridCurrentRow(grid, e) { 
     var parent = Ext.fly(e.target).findParent(grid.getView().rowSelector, grid.getView().rowSelectorDepth); 

     if (parent) {  // if no row selected 
      grid.currentRow = grid.store.getRange()[parent.rowIndex].data; 
     } 
     else {    // else - row selected 
      grid.currentRow = grid.getRowsValues()[0]; 
     } 
    } 
</script> 

<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!X.IsAjaxRequest) 
     { 
      Ext.Net.ConfigItem cItem = new Ext.Net.ConfigItem(); 
      cItem.Mode = Ext.Net.ParameterMode.Raw; 
      cItem.Name = "listeners"; 
      cItem.Value += "{'keydown':function(e){ if(e.getKey()==9){setGridCurrentRow(" + TestGrid.ID + ",e);}}"; 
      cItem.Value += ",'mousedown':function(e){ if(e.target != null) setGridCurrentRow(" + TestGrid.ID + ",e);}"; 
      cItem.Value += ",'command':function(command,gridRecord){alert('Here I am!');}}"; 
      TestGrid.CustomConfig.Add(cItem); 

      TestStore.DataSource = Data; 
      this.TestStore.DataBind();    
     } 
    } 

    private object[] Data 
    { 
     get 
     { 
      return new object[] 
      { 
       new object[] { 1, "f", "First", "" }, 
       new object[] { 2, "s", "Second", "" }, 
       new object[] { 3, "f", "First", "" }, 
       new object[] { 4, "t", "Third", "" }, 
       new object[] { 5, "f", "Fourth", "" },     
      }; 
     } 
    }   

</script> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <ext:ResourceManager ID="ResourceManager1" runat="server" /> 
    <form id="form1" runat="server"> 
    <div> 
     <ext:Store ID="TestStore" runat="server" > 
      <Reader> 
       <ext:ArrayReader IDProperty="ID" > 
        <Fields> 
         <ext:RecordField Name="ID"></ext:RecordField> 
         <ext:RecordField Name="TestText"></ext:RecordField> 
         <ext:RecordField Name="TestValue"></ext:RecordField> 
         <ext:RecordField Name="ButtonText"></ext:RecordField> 
        </Fields>      
       </ext:ArrayReader> 
      </Reader> 
     </ext:Store> 
     <ext:GridPanel ID="TestGrid" runat="server" StoreID="TestStore" Width="600" Height="350" ClicksToEdit="1" TrackMouseOver="true" Selectable="true" > 
      <ColumnModel ID="TestModel"> 
       <Columns> 
        <ext:Column ColumnID="TestText" Header="TestText" MenuDisabled="true"> 
         <Editor> 
          <ext:TextField ID="TestText_Text" runat="server"></ext:TextField>        
         </Editor> 
        </ext:Column> 
        <ext:Column ColumnID="TestValue" Header="Value" MenuDisabled="true"> 
         <Editor> 
          <ext:ComboBox ID="TestValue_Combo" runat="server" Editable="false" ForceSelection="true"> 
           <Items> 
            <ext:ListItem Text="First" Value="1" /> 
            <ext:ListItem Text="Second" Value="2" /> 
            <ext:ListItem Text="Third" Value="3" /> 
            <ext:ListItem Text="Fourth" Value="4" /> 
            <ext:ListItem Text="Fifth" Value="5" /> 
           </Items> 
          </ext:ComboBox> 
         </Editor> 
        </ext:Column> 
        <ext:Column ColumnID="TestButton" Header="Edit" MenuDisabled="true"> 
         <Commands>        
          <ext:ImageCommand Icon="ApplicationEdit" CommandName="Edit" Text="Edit" ></ext:ImageCommand> 
         </Commands> 
        </ext:Column>  
       </Columns> 
      </ColumnModel> 
      <SelectionModel > 
       <ext:CheckboxSelectionModel ID="TestSelectionModel" runat="server" ></ext:CheckboxSelectionModel> 
      </SelectionModel> 
     </ext:GridPanel> 
    </div> 
    </form> 
</body> 
</html> 
+0

전체 테스트 케이스를 제공하십시오. 나는 조사 할 것이다. –

+0

@DaniilVeriga : 답장을 보내 주셔서 감사합니다! 불행히도이 예제는 C# 및 javaScript 코드가 많이 포함 된 거대한 프로젝트의 일부이기 때문에 전체 예제를 제공 할 수는 없습니다. 여기에서는 문제와 관련된 부분을 격리했습니다. 또한 상황을 더 잘 설명하기 위해 이미지를 추가했습니다. 이견있는 사람? 미리 감사드립니다! –

+0

불행히도, 나는 가능한 이유에 대한 생각이 없습니다. 글쎄, 거대한 프로젝트를 단순한 테스트 케이스로 줄이는 것이 가능해야한다. 네, 시간이 좀 걸릴 수 있습니다. 또 다른 옵션은 [일부 기본 예제] (http://examples.ext.net/#/GridPanel/ArrayGrid/Simple/)를 가져 와서 문제를 재현 할 때까지 관련 기능으로 확장하는 것입니다. –

답변

1

이 호출은 동작이 발생합니다 : 여기

는,이 동작을 재현 어디 설정 한 간단한 예입니다 그 이유를 알아 두십시오. 그러나 해결책으로 바꾸시기 바랍니다.

grid.getStore().getAt(0).data 
+0

위대한,이 일을, 고마워! –