[英]How to Filter foreignkey in gridPanel
我正在使用Ext.NET GridPanel
在系統中顯示項目任務的列表,並且每個任務都有其完成狀態,例如“ 完成” ,“正在運行” ,“ 未啟動”等。
這是我的gridPanel的一部分:
這些進度狀態是數據庫中另一個表中的記錄,如下所示:
它與SprintStatus
> SprintStatusID
相關,並且在gridPanel
顯示SprintStatusName
。
我想做的是通過StatusName對其進行本地過濾,但是我能完成此操作的唯一方法是將ext:ListFilter
選項設置為其ID(1、2、3、4),這不好,因為我沒有不想顯示ID
這是過濾器
如何使其顯示StatusName而不是StatusID?
<ext:GridPanel
ID="grdProjects"
runat="server"
AutoHeight="true"
EnableColumnMove="false"
Collapsible="false"
AnimCollapse="true"
StripeRows="true"
Title="Projetos" >
<Bin>
<ext:Store ID="storeStatus" runat="server">
<Reader>
<ext:JsonReader IDProperty="StatusID">
<Fields>
<ext:RecordField Name="StatusID" Type="Int" />
<ext:RecordField Name="StatusName" Type="String" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
<ext:Store ID="storeUsers" runat="server">
<Reader>
<ext:JsonReader IDProperty="DeveloperID">
<Fields>
<ext:RecordField Name="DeveloperID" Type="Int" />
<ext:RecordField Name="DeveloperName" Type="String" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
</Bin>
<Store>
<ext:Store ID="ProjectsStore" runat="server" GroupField="ProjectName">
<Reader>
<ext:JsonReader IDProperty="ID">
<Fields>
<ext:RecordField Name="ProjectName" Type="String" />
<ext:RecordField Name="ID" Type="Int" />
<ext:RecordField Name="Name" Type="String" />
<ext:RecordField Name="Status" Type="String" />
<ext:RecordField Name="Owner" Type="String" />
<ext:RecordField Name="Begin" Type="Date" />
<ext:RecordField Name="End" Type="Date" />
<ext:RecordField Name="RealEnd" Type="Date" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
</Store>
<Listeners>
<AfterEdit Fn="afterEdit" />
</Listeners>
<ColumnModel ID="ColumnModel20" runat="server">
<Columns>
<ext:Column ColumnID="SprintProject" Header="Projeto" Align="Left" DataIndex="ProjectName" />
<ext:Column ColumnID="SprintName" Header="Nome" Align="Left" DataIndex="Name" />
<ext:Column ColumnID="SprintStatus" Header="Status" Align="Left" DataIndex="Status">
<Renderer Handler="return #{storeStatus}.getById(value).data.StatusName;" />
<Editor>
<ext:SelectBox
ID="selStatus"
StoreID="storeStatus"
runat="server"
DisplayField="StatusName"
ValueField="StatusID"
EmptyText="Selecione um status" />
</Editor>
</ext:Column>
<ext:Column ColumnID="SprintOwner" Header="Recurso" Align="Left" DataIndex="Owner">
<Renderer Handler="return #{storeUsers}.getById(value).data.DeveloperName;" />
<Editor>
<ext:SelectBox
ID="selDevelopers"
StoreID="storeUsers"
runat="server"
DisplayField="DeveloperName"
ValueField="DeveloperID"
EmptyText="Selecione um recurso" />
</Editor>
</ext:Column>
<ext:DateColumn ColumnID="SprintBegin" Header="Data de início" Align="Center" DataIndex="Begin" Format="dd/MM/yyyy">
<Editor>
<ext:DateField Format="dd/MM/yyyy" runat="server" />
</Editor>
</ext:DateColumn>
<ext:DateColumn ColumnID="SprintEnd" Header="Previsão de término" Align="Center" DataIndex="End" Format="dd/MM/yyyy">
<Editor>
<ext:DateField Format="dd/MM/yyyy" runat="server" />
</Editor>
</ext:DateColumn>
<ext:DateColumn ColumnID="SprintRealEnd" Header="Data de término" Align="Center" DataIndex="RealEnd" Format="dd/MM/yyyy">
<Editor>
<ext:DateField Format="dd/MM/yyyy" runat="server" />
</Editor>
</ext:DateColumn>
</Columns>
</ColumnModel>
<SelectionModel>
<ext:RowSelectionModel ID="RowSelectionModel1" runat="server" SingleSelect="true" />
</SelectionModel>
<View>
<ext:GroupingView SplitHandleWidth="10"
runat="server"
ForceFit="true"
MarkDirty="false"
ShowGroupName="false"
EnableNoGroups="true"
HideGroupedColumn="true" ID="ctl222">
</ext:GroupingView>
</View>
<Plugins>
<ext:GridFilters runat="server" ID="GridFilters1" Local="true">
<Filters>
<ext:ListFilter DataIndex="Status" Options="1,2,3,4">
<Listeners>
<Activate Buffer="250" Fn="filtraNaoConcluido" />
</Listeners>
</ext:ListFilter>
</Filters>
</ext:GridFilters>
</Plugins>
</ext:GridPanel>
這是一種使用商店來提供ListFilter選項的方法。
但是...此樣本有問題。
篩選器實際上未正確應用。
我必須做更多的研究。
一旦弄清楚到底出了什么問題,我會回來編輯這篇文章。
我還將嘗試弄清楚是否可以僅使用.Options屬性設置name:value對。
編輯:示例已更新。
例
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
var companies = new[] {
new { ID = 1, Name = "Company A", Size = 3 },
new { ID = 2, Name = "Company B", Size = 1 },
new { ID = 3, Name = "Company C", Size = 5 },
new { ID = 4, Name = "Company D", Size = 3 },
new { ID = 5, Name = "Company E", Size = 4 },
};
this.Store1.DataSource = companies;
this.Store1.DataBind();
var sizes = new [] {
new { Name = "Extra Small", ID = 1 },
new { Name = "Small", ID = 2 },
new { Name = "Medium", ID = 3 },
new { Name = "Large", ID = 4 },
new { Name = "Extra Large", ID = 5 }
};
this.Store2.DataSource = sizes;
this.Store2.DataBind();
}
}
</script>
<!DOCTYPE html>
<html>
<head runat="server">
<title>Ext.NET Examples</title>
<ext:ResourcePlaceHolder runat="server" />
<script type="text/javascript">
var myValidateRecord = function (record) {
var filterValue = this.getValue(),
item;
if (filterValue.length == 0) {
return true;
}
item = this.store.query("ID", record.data.Size).first();
return item ? filterValue.indexOf(item.data.Name) != -1 : false;
}
</script>
</head>
<body>
<ext:ResourceManager runat="server" />
<ext:GridPanel
runat="server"
Title="Example"
Width="350"
Height="215"
AutoExpandColumn="Name">
<Store>
<ext:Store ID="Store1" runat="server">
<Reader>
<ext:JsonReader IDProperty="ID">
<Fields>
<ext:RecordField Name="ID" Type="Int" />
<ext:RecordField Name="Name" />
<ext:RecordField Name="Size" Type="Int" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
</Store>
<Bin>
<ext:Store ID="Store2" runat="server">
<Reader>
<ext:JsonReader IDProperty="ID">
<Fields>
<ext:RecordField Name="ID" Type="Int" />
<ext:RecordField Name="Name" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
</Bin>
<ColumnModel runat="server">
<Columns>
<ext:Column Header="ID" DataIndex="ID" />
<ext:Column Header="Name" DataIndex="Name" />
<ext:Column Header="Size" DataIndex="Size">
<Renderer Handler="return Store2.getById(value).data.Name" />
</ext:Column>
</Columns>
</ColumnModel>
<Plugins>
<ext:GridFilters runat="server" Local="true">
<Filters>
<ext:NumericFilter DataIndex="ID" />
<ext:StringFilter DataIndex="Company" />
<ext:ListFilter DataIndex="Size" StoreID="Store2" LabelField="Name">
<ValidateRecord Fn="myValidateRecord" />
</ext:ListFilter>
</Filters>
</ext:GridFilters>
</Plugins>
</ext:GridPanel>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.