2013-06-18 4 views
0

Я занимаюсь разработкой веб-сайта ASP.NET, и я использую GridPanel с разделом RowExpander. :Ext.Net: RowExpander: невозможно отобразить вложенную GridPanel в Codebehind (VB.NET)

<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 (сетки) составляет:

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

Так что-то я делаю неправильно в функции GetGrid. Что мне не хватает?

Каждый пример, с которым я сталкиваюсь, написан на C#.

ответ

0

Я знаю, что вы конвертируете this C# example в VB.NET.

Ну, мягко говоря, я не владею VB.NET. Таким образом, в этом случае я использую конвертеры C# в VB.NET. Например, the Telerik one.

Кажется, 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> 

P.S. Источником ответа является here.

+2

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – RAS

+0

Спасибо, @RAS, вы правы. Я отредактировал ответ. –

+0

Добро пожаловать. – RAS

Смежные вопросы