0

私は ASP.NET Web サイトを開発しており、RowExpander セクションを持つ GridPanel を使用しています。:

<ext:RowExpander ID="RowExpander1" runat="server">
            <Loader ID="Loader1" runat="server" DirectMethod="#{DirectMethods}.GetGrid" Mode="Component">
                <LoadMask ShowMask="true" />
                <Params>
                    <ext:Parameter Name="id" Value="this.record.getId()" Mode="Raw" />
                </Params>
            </Loader>
        </ext:RowExpander>

コード ビハインドでは、「GetData」と呼ばれる関数が、次のようなネストされた GridPanel を動的に作成する必要があります。

<Ext.Net.DirectMethod()>
Public Function GetGrid(ByVal parameters As Dictionary(Of String, String)) As Object

    Dim data As New List(Of Object)

    For i = 1 To 10
        data.Add(New With {.ID = "P" & i, .Name = "Product " & i})
    Next

    Dim config As New Ext.Net.GridPanel.Config

    config.Height = 50
    config.EnableColumnHide = False
    config.StoreID = "Store2"

    Dim store As New Ext.Net.Store
    Dim model As New Ext.Net.Model

    store.ID = "Store2"
    store.DataSource = data
    store.ModelName = "Model2"

    model.ID = "Model2"
    model.IDProperty = "ID"
    model.Fields.Add("ID")
    model.Fields.Add("Name")

    store.Model.Add(model)
    config.Store.Add(store)
    config.StoreID = "Store2"

    Dim column As New Ext.Net.Column
    column.ID = "ColumnModel2"
    column.Text = "Products's Name"
    column.DataIndex = "Name"
    config.ColumnModel.Columns.Add(column)
    config.ColumnModel.Add(column)

    Dim grid As New Ext.Net.GridPanel(config)

    Return Ext.Net.ComponentLoader.ToConfig(grid)

End Function

GridPanel の「+」をクリックすると、列がなくても空のグリッドが表示されます。実際、Ext.Net.ComponentLoader.ToConfig(grid) によって生成されるコードは次のとおりです。

[{"height":50,"xtype":"grid","columns":{},"enableColumnHide":false,"store":"Store2"}]

そのため、GetGrid 関数で間違っていることがあります。私は何が欠けていますか?

私が遭遇するすべての例は C# で書かれています。

4

1 に答える 1

0

この C# の例を VB.NETに変換していることは知っています。

控えめに言っても、私は VB.NET に堪能ではありません。そのような場合、C# から VB.NET へのコンバーターを使用します。たとえば、Telerik の 1 つです。

VB.NET には読み取り専用プロパティのオブジェクト初期化子がないようです (ただし、100% 確実ではありません)。そのため、変換前に C# コードを次のように変更する必要がありました。

[DirectMethod]
public static string GetGrid(Dictionary<string, string> parameters)
{
    GridPanel grid = new GridPanel
    {
        Height = 200,
        EnableColumnHide = false
    };

    List<object> data = new List<object>();

    for (int i = 1; i <= 10; i++)
    {
        data.Add(new { ID = "P" + i, Name = "Product " + i });
    }

    Store store = new Store();

    Model model = new Model()
    {
        IDProperty = "ID"
    };

    model.Fields.Add(new ModelField("ID"));
    model.Fields.Add(new ModelField("Name"));


    store.Model.Add(model);

    store.DataSource = data;
    grid.Store.Add(store);

    grid.ColumnModel.Columns.Add(new Column { Text = "Products's Name", DataIndex = "Name" });

    return ComponentLoader.ToConfig(grid);
}

コンバーターに入れると、出力をわずかに変更してコンパイル可能にし、最終的にVB.NETの例を取得しました。

<%@ Page Language="VB" %>

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

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

<script runat="server">
    Protected Sub Page_Load(sender As Object, e As EventArgs)
        If Not ExtNet.IsAjaxRequest Then
            Dim data As New List(Of Object)()

            For i As Integer = 1 To 10
                data.Add(New With { _
                    .ID = "S" & i.ToString(), _
                    .Name = "Supplier " & i.ToString() _
                })
            Next

            Me.Store1.DataSource = data
        End If

    End Sub

    <DirectMethod> _
    Public Shared Function GetGrid(parameters As Dictionary(Of String, String)) As String
        Dim grid As New GridPanel() With { _
            .Height = 200, _
            .EnableColumnHide = False _
        }

        Dim data As New List(Of Object)()

        For i As Integer = 1 To 10
            data.Add(New With { _
                .ID = "P" & i.ToString(), _
                .Name = "Product " & i.ToString() _
            })
        Next

        Dim store As New Store()

        Dim model As New Model() With { _
            .IDProperty = "ID" _
        }

        model.Fields.Add(New ModelField("ID"))
        model.Fields.Add(New ModelField("Name"))


        store.Model.Add(model)

        store.DataSource = data
        grid.Store.Add(store)

        grid.ColumnModel.Columns.Add(New Column() With { _
            .Text = "Products's Name", _
            .DataIndex = "Name" _
        })

        Return ComponentLoader.ToConfig(grid)
    End Function
</script>

<!DOCTYPE html>

<html>
<head runat="server">
    <title>Ext.NET v2 Example</title>
</head>
<body>
    <form runat="server">
        <ext:ResourceManager runat="server" />

        <ext:GridPanel
            runat="server"
            Title="Expander Rows with GridPanel"
            Collapsible="true"
            AnimCollapse="true"
            Icon="Table"
            Width="600"
            Height="450"
            DisableSelection="true">
            <Store>
                <ext:Store ID="Store1" runat="server">
                    <Model>
                        <ext:Model runat="server" IDProperty="ID">
                            <Fields>
                                <ext:ModelField Name="ID" />
                                <ext:ModelField Name="Name" />
                            </Fields>
                        </ext:Model>
                    </Model>
                </ext:Store>
            </Store>
            <ColumnModel runat="server">
                <Columns>
                    <ext:Column runat="server" Text="Supplier" DataIndex="Name" Flex="1" />
                </Columns>
            </ColumnModel>
            <Plugins>
                <ext:RowExpander runat="server">
                    <Loader runat="server" DirectMethod="#{DirectMethods}.GetGrid" Mode="Component">
                        <LoadMask ShowMask="true" />
                        <Params>
                            <ext:Parameter Name="id" Value="this.record.getId()" Mode="Raw" />
                        </Params>
                    </Loader>
                </ext:RowExpander>
            </Plugins>
        </ext:GridPanel>
    </form>
</body>
</html>

PS答えのソースはこちらです。

于 2013-06-26T06:02:45.480 に答える