如何在编辑后在GridPanel中显示一对多相关列?

时间:2012-02-24 17:34:05

标签: .net vb.net relationship ext.net

情况概述

我正在使用Ext.NET GridPanel来显示一个项目列表,其中包含分配给某个用户和状态的任务(我称之为Sprints)。所以我得到了这种关系:

enter image description here

SprintOwner -> UserID
SprintStatus -> SprintStatusID

在我的GridPanel中,我显示了按项目分组的sprint,我使用关系来显示他们的名字而不是他们的ID(SprintStatusName和UserName)。它是葡萄牙语,但我觉得它很有用:

enter image description here

按此顺序,我有姓名,状态和SprintOwner,我可以编辑所有内容。

问题

在Status和SprintOwner中,我有一个comboBox,其值与ID相关联。一旦我编辑它,网格就会更新我的数据库并再次渲染数据,但它不会显示名称,而是显示如下的值(ID):

enter image description here

如何让它再次显示他们的名字?

因此我的Page_Load方法

Dim db As New ProjectManagerDataContext

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        ' Retorna as sprints do banco de dados
        ProjectsStore.DataSource = From sp In db.Sprints _
                            Select New With { _
                                .ID = sp.SprintID, _
                                .Name = sp.SprintName, _
                                .ProjectName = "[" & sp.Project.ProjectGroup1.ProjectGroupName & "] " & sp.Project.ProjectName, _
                                .Status = sp.SprintStatus1.SprintStatusName, _
                                .Owner = sp.User.UserName, _
                                .BeginDate = sp.SprintBegin, _
                                .EndDate = sp.SprintEnd, _
                                .RealEnd = sp.SprintRealEnd}
        ProjectsStore.DataBind()

        Store2.DataSource = From ss In db.SprintStatus _
                            Select New With { _
                                .StatusID = ss.SprintStatusID, _
                                .StatusName = ss.SprintStatusName}
        Store2.DataBind()

        Store3.DataSource = (From u In db.Users _
                             Select New With { _
                                .DeveloperName = u.UserName, _
                                .DeveloperID = u.UserID})
        Store3.DataBind()


    End If

End Sub

[EDITED]

我的.asp:

<ext:GridPanel 
        ID="grdProjects"
        runat="server"
        AutoHeight="true" 
        EnableColumnMove="false" 
        Collapsible="false"
        AnimCollapse="true"
        StripeRows="true" 
        Title="Projetos" >

        <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">
                    <Editor>
                        <ext:SelectBox
                            ID="selStatus"
                            runat="server" 
                            DisplayField="StatusName"
                            ValueField="StatusID"
                            EmptyText="Selecione um status">

                            <Store>
                                <ext:Store ID="Store2" 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>
                            </Store>   
                        </ext:SelectBox>
                    </Editor>
                </ext:Column>



                <ext:Column ColumnID="SprintOwner" Header="Recurso" Align="Left" DataIndex="Owner">
                    <Editor>
                        <ext:SelectBox
                            ID="selDevelopers"
                            runat="server" 
                            DisplayField="DeveloperName"
                            ValueField="DeveloperID"
                            EmptyText="Selecione um recurso">

                            <Store>
                                <ext:Store ID="Store3" 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>
                            </Store>   
                        </ext:SelectBox>
                    </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>

        <View>
            <ext:GroupingView   SplitHandleWidth="10" 
                                runat="server"
                                ForceFit="true"
                                MarkDirty="false"
                                ShowGroupName="false"
                                EnableNoGroups="true"
                                HideGroupedColumn="true" ID="ctl222" />
        </View>

</ext:GridPanel>

1 个答案:

答案 0 :(得分:2)

我必须看看您Store ReaderGridPanel Columns的配置方式,以确定出现了什么问题。以下示例应该有助于它演示类似的场景,并可用于解决您的代码。

示例

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

<%@ Import Namespace="System.Collections.Generic" %>

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

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        // Owners

        var owners = new List<Person>();

        var billy = new Person
        {
            ID = 1,
            Name = "Billy"
        };

        var frank = new Person 
        {
                ID = 2,
                Name = "Frank"
        };

        var jane = new Person
        {
            ID = 3,
            Name = "Jane"
        };

        owners.AddRange(new Person[] { billy, frank, jane });

        this.strOwners.DataSource = owners;
        this.strOwners.DataBind();


        // Projects

        var projects = new List<Project>();

        projects.AddRange(new Project[] { 
            new Project { 
                ID = 1,
                Name = "Project A",
                Owner = billy
            },
            new Project {
                ID = 2,
                Name = "Project B",
                Owner = frank
            },
            new Project {
                ID = 3,
                Name = "Project C",
                Owner = jane
            }
        });

        this.strProjects.DataSource = projects;
        this.strProjects.DataBind();
    }

    public class Project
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public Person Owner { get; set; }
    }

    public class Person
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
</script>
<!DOCTYPE html>
<html>
<head runat="server">
    <title>Ext.NET Example</title>
</head>
<body>
<form runat="server">
    <ext:ResourceManager runat="server" />

    <ext:GridPanel 
        runat="server" 
        Title="Example" 
        Height="350" 
        Width="500"
        AutoExpandColumn="Owner">
        <Bin>
            <ext:Store ID="strOwners" 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>
        <Store>
            <ext:Store ID="strProjects" runat="server">
                <Reader>
                    <ext:JsonReader IDProperty="ID">
                        <Fields>
                            <ext:RecordField Name="ID" Type="Int" />
                            <ext:RecordField Name="Name" />
                            <ext:RecordField Name="OwnerID" ServerMapping="Owner.ID" />
                        </Fields>
                    </ext:JsonReader>
                </Reader>
            </ext:Store>
        </Store>
        <ColumnModel runat="server">
            <Columns>
                <ext:Column Header="ID" DataIndex="ID" />
                <ext:Column Header="Name" DataIndex="Name" />
                <ext:Column ColumnID="Owner" Header="Owner" DataIndex="OwnerID">
                    <Renderer Handler="return strOwners.getById(value).data.Name;" />
                    <Editor>
                        <ext:ComboBox 
                            runat="server" 
                            StoreID="strOwners"
                            DisplayField="Name"
                            ValueField="ID"
                            />
                    </Editor>
                </ext:Column>
            </Columns>
        </ColumnModel>
    </ext:GridPanel>
</form>
</body>
</html>

希望这有帮助。