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];
}
문제가 발생 여기에 코드입니다. 행이 선택됩니다. 괜찮습니다. 그러나 콤보 값은 표시되지 않습니다. 콤보 (현재 그리드 행에 표시된 값)에 하나의 값만있는 것처럼 보입니다.
키보드를 사용하여 탐색 할 때, 콤보가 열리고 모든 값이 표시됩니다.
그것은 보인다 그리드 행 재정 콤보의 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>
전체 테스트 케이스를 제공하십시오. 나는 조사 할 것이다. –
@DaniilVeriga : 답장을 보내 주셔서 감사합니다! 불행히도이 예제는 C# 및 javaScript 코드가 많이 포함 된 거대한 프로젝트의 일부이기 때문에 전체 예제를 제공 할 수는 없습니다. 여기에서는 문제와 관련된 부분을 격리했습니다. 또한 상황을 더 잘 설명하기 위해 이미지를 추가했습니다. 이견있는 사람? 미리 감사드립니다! –
불행히도, 나는 가능한 이유에 대한 생각이 없습니다. 글쎄, 거대한 프로젝트를 단순한 테스트 케이스로 줄이는 것이 가능해야한다. 네, 시간이 좀 걸릴 수 있습니다. 또 다른 옵션은 [일부 기본 예제] (http://examples.ext.net/#/GridPanel/ArrayGrid/Simple/)를 가져 와서 문제를 재현 할 때까지 관련 기능으로 확장하는 것입니다. –