2016-05-09 7 views
0

Ich muss eine Tabelle erstellen, um eine Liste von Streams zu überwachen. Die Tabelle, wie Sie aus dem beigefügten sehen zu können, müssen die folgenden Merkmale aufweisen:So binden Sie komplexe Objekte an Teleriks RadGrid

  • Die Strombeschreibung (oder Namen)
  • Der Typ (Eingang, Ausgang oder beide) überwacht werden
  • Die Ergebnisse eines bestimmten Tages (und hier ist das Problem)

Dies ist das Ergebnis desidered: enter image description here

Die Datenströme werden vom Web-Service über JSON bereitgestellt.

Ich plante alles mit dem RadGrid, aber ich habe einige Schwierigkeiten bei der Implementierung.

Dies ist das Modell weitergeben müssen:

[DataContractFormat] 
public class StreamOutputDto : BaseDto 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 
    public List<DetailStream> Details { get; set; } 
} 

Wo "DetailStream" ist:

public class DetailStream 
{ 
    public string Id { get; set; } 
    public DateTime Date { get; set; } 
    public int CountInfo { get; set; } 
    public StateStream StateInput { get; set; } 
    public StateStream StateOutput { get; set; } 
    //... 
} 

public enum StateStream 
{ 
    InProgress, 
    Received, 
    Declined, 
    Inexistent 
} 

So DetailStream das Ergebnis eines bestimmten Strom in einem bestimmten Tag ist . Details ist eine Liste von DetailStream, dh die Ergebnisse eines bestimmten Streams in einer bestimmten Woche.

Mit Name und Typ gibt es keine Probleme, aber ich weiß nicht, wie Sie die Liste von DetailStream verwalten. Jemand kann mir helfen?

Dies ist meine aktuelle Implementierung:

Mein Web Service:

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    [WebInvoke(
     Method = "POST", 
     ResponseFormat = WebMessageFormat.Json)] 
    StandardResponse<StreamOutputDto> GetStream(string request); 
} 


[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
[MessageLoggingBehavior] 
public class MyService : IMyService 
{ 

    public StandardResponse<StreamOutputDto> GetStream(string request) 
    { 
     // TEST CASE: 
     StandardResponse<StreamOutputDto> response = new StandardResponse<StreamOutputDto>(); 
     response.Output = new StreamOutputDto(); 
     response.Output.Name = "Hi!"; 
     response.Output.Type = "Input"; 
     response.Output.Details = new List<DetailStream>(); 

     response.Output.Details.Add(new DetailStream(){ 
       Id = "1", 
       CountInfo = 100, 
       Date = DateTime.Today }); 

      response.Output.Details.Add(new DetailStream(){ 
       Id = "2", 
       CountInfo = 200 }); 

     return response; 
    } 

} 

Mein WebForm.aspx:

<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 
    <script src="RadGridParser.js"></script> 
</head> 

<body> 

    <telerik:RadScriptManager runat="server" ID="RadScriptManager1" /> 
    <telerik:RadSkinManager ID="RadSkinManager1" runat="server" ShowChooser="true"/> 

    <telerik:RadGrid ID="RadGrid1" RenderMode="Lightweight" ClientDataSourceID="RadClientDataSource1" 
      AllowPaging="false" AllowSorting="false" AllowFilteringByColumn="false" PageSize="5" runat="server"> 

     <MasterTableView DataKeyNames="Name" ClientDataKeyNames="Name"> 
      <Columns> 
       <telerik:GridBoundColumn DataField="Name" HeaderText="" DataType="System.String" > 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn DataField="Type" HeaderText="Tipologia flusso" DataType="System.String"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn DataField="Day1" HeaderText="Lunedì"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn DataField="Day2" HeaderText="Martedì"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn DataField="Day3" HeaderText="Mercoledì"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn DataField="Day4" HeaderText="Giovedì"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn DataField="Day5" HeaderText="Venerdì"> 
       </telerik:GridBoundColumn> 
      </Columns> 
     </MasterTableView> 

    </telerik:RadGrid> 

    <telerik:RadClientDataSource ID="RadClientDataSource1" runat="server" AllowBatchOperations="true"> 
     <ClientEvents OnCustomParameter="ParameterMap" OnDataParse="Parse" /> 
     <DataSource> 
      <WebServiceDataSourceSettings> 
       <Select Url="http://soldev/Axa.Sol.Web/ws/Ivass/IvassService.svc/GetStream" DataType="JSON" RequestType="Post" /> 
      </WebServiceDataSourceSettings> 
     </DataSource> 
     <Schema ResponseType="JSON"> 
      <Model ID="StreamModel"> 
       <telerik:ClientDataSourceModelField FieldName="Name" DataType="String" /> 
       <telerik:ClientDataSourceModelField FieldName="Type" DataType="String" /> 
       <telerik:ClientDataSourceModelField FieldName="Day1" DataType="String" /> 
       <telerik:ClientDataSourceModelField FieldName="Day2" DataType="String" /> 
       <telerik:ClientDataSourceModelField FieldName="Day3" DataType="String" /> 
       <telerik:ClientDataSourceModelField FieldName="Day4" DataType="String" /> 
       <telerik:ClientDataSourceModelField FieldName="Day5" DataType="String" /> 
      </Model> 
     </Schema> 
    </telerik:RadClientDataSource> 

</body> 

Mein RadGridParser.js:

//<![CDATA[ 
function ParameterMap(sender, args) { 
    //If you want to send a parameter to the select call you can modify the if 
    //statement to check whether the request type is 'read': 
    //if (args.get_type() == "read" && args.get_data()) { 
    if (args.get_type() != "read" && args.get_data()) { 
     args.set_parameterFormat({ request: kendo.stringify(args.get_data().models) }); 
    } 
} 

function Parse(sender, args) { 
    var response = args.get_response(); 
    if (response) { 
     args.set_parsedData(response.Output); 
    } 
} 

function UserAction(sender, args) { 
    if (sender.get_batchEditingManager().hasChanges(sender.get_masterTableView()) && 
       !confirm("Any changes will be cleared. Are you sure you want to perform this action?")) { 
     args.set_cancel(true); 
    } 
} 

//]]> 

Antwort

1

RadGrid kann dies nicht auspacken. Das Einzige, was Sie tun können, ist eine TemplateColumn. Die Vorlagenspalte hat ein "ItemTemplate", "InsertTemplate" und ein "EditTemplate".

Sie können alle Steuerelemente und HTML-Elemente in diesem Container platzieren. Außerdem können Sie auf diese Steuerelemente (und Ihr Datenelement) im Ereignis "ItemDataBound" des Rasters zugreifen. Dies sollte Ihnen helfen, Ihr Szenario zu erreichen.

Referenzen: Template Columns

Artikel-Databound-Ereignis:

protected void RadGrid_ItemDataBound(object sender, GridItemEventArgs e) 
{ 
if (e.Item is GridDataItem) 
{ 
    GridDataItem gridItem = e.Item as GridDataItem; 
    dynamic dataItem = (YourType)(gridItem.DataItem); 
    gridItem.ToolTip = dataItem.ID + " - " + dataItem.UUID; 
} 
}