【问题标题】:Flex Upload XML to datagrid/databaseFlex 将 XML 上传到数据网格/数据库
【发布时间】:2011-04-29 08:12:35
【问题描述】:

我们的项目需要浏览和上传 XML 文件并将其显示在数据网格上,编辑网格,然后将内容保存到数据库中。我可以看到从特定文件夹获取 XML 并显示在数据网格上的示例,但看不到任何浏览 XML 然后上传的示例。如果有人可以向我指出示例或一些示例代码,那就太好了。我们的 XML 看起来像:

<VisitImportList>
    <Visit>
        <AuditDetails>
            <UpdateUser>ADMIN</UpdateUser>
            <UpdateTimestamp>2010-10-22T16:25:26.593Z</UpdateTimestamp>
        </AuditDetails>
        <VisitId>3</VisitId>
        <MeasurementCollectionId>4</MeasurementCollectionId>
        <WeightConfirmationCode>5</WeightConfirmationCode>
        <PrefilledIndicator>true</PrefilledIndicator>
        <VisitDate>2010-10-22T16:25:26.593Z</VisitDate>     
    </Visit>
    <Visit>
        <AuditDetails>
            <UpdateUser>ADMIN</UpdateUser>
            <UpdateTimestamp>2010-10-22T16:25:26.593Z</UpdateTimestamp>
        </AuditDetails>
        <VisitId>3</VisitId>
        <MeasurementCollectionId>3</MeasurementCollectionId>
        <BloodPressureConfirmationCode>4</BloodPressureConfirmationCode>
        <PrefilledIndicator>true</PrefilledIndicator>
        <VisitInvalidCode>1</VisitInvalidCode>
        <VisitInvalidReasonText>No Dates</VisitInvalidReasonText>
    </Visit>
</VisitImportList>

好的,我已经能够使用 FileReference 上传和 XML/XMLListCollection 在网格上显示数据。现在的问题是当我尝试保存到数据库时。我不想创建一个新线程,所以我在这里添加了我的问题:

private function saveVisit(event:MouseEvent): void
            {
var decoder:SimpleXMLDecoder = new SimpleXMLDecoder();
                var data:Object = decoder.decodeXML(xmlDoc);

                var array:Array = ArrayUtil.toArray(data.VisitImportList.Visit);
                tempCollection = new ArrayCollection(array);

现在我的 arraycollection (tempCollection) 中有数据。但它包含通用对象,我需要将它们转换为访问对象。所以我想循环遍历 ArrayCollection,将对象转换为特定的自定义访问对象,然后将它们添加到另一个集合(我确定这不是正确的方法,但我无法想出一个替代):

     for (var i:int = 0; i < tempCollection.length; ++i) 
                        {               
                            model.visit = new Visit();  
                            model.visit = Visit(tempCollection.getItemAt(i, 0)); // This line gives the error Type Coercion failed: cannot convert Object@1d4e4719 to com.model.Visit.
                            model.visit = tempCollection.getItemAt(i) as Visit; // This line always has Visit as null eventhough the tempCollection has 2 objects

model.pvList.visits.addItemAt(Visit, i);
}

那么有人可以帮助了解如何遍历 ArraCollection 并将 AS 对象转换为自定义访问对象,然后添加到另一个 ArrayCollection 或更简单的方法来做到这一点

谢谢

哈里什

【问题讨论】:

    标签: xml apache-flex datagrid upload arraycollection


    【解决方案1】:

    如果您正在使用 AIR 应用程序,您可以使用 Flex 中的 File 和 FileStream 对象轻松访问计算机中的资源。

    http://livedocs.adobe.com/flex/3/html/help.html?content=Filesystem_16.html

    获取 XML 对象,然后将其从其 item 命令转换为 XMLListCollection,即

    var xmlProvider:XMLListCollection = new XMLListCollection(xml.Visit);
    

    将此提供程序设置为您的数据网格并编写脚本以按照您想要的方式上传和保存此数据。

    但是,如果您正在编写 Web 应用程序。您无法访问不在客户端上的弹性临时文件路径中的资源。或者您必须使用“Global Security Settings”授予对客户端计算机上文件夹/文件的灵活访问权限。在这种情况下,相同的 AIR api 应该可以工作。

    但是,如果您不想这样做,那么显然您必须将文件上传到服务器上,在客户端使用 HTTPService 读取该对象,创建 XMLListCollection 对象并将数据加载到 DataGrid 中。这会有所帮助

    1. Upload File
    2. HTTP Service + DataGrid Sample for XML file on server

    【讨论】:

    • 谢谢法希姆。我能够使用 FileReference 进行浏览/上传和 XML/XMLListCollection 显示在数据网格上。但是现在我在保存到数据库时遇到了另一个问题。我已将此附加到主要问题。请帮助任何人
    • 这是更简单的方法...cookbooks.adobe.com/…
    • 很棒的 Faheem,除了 1 个问题外几乎解决了 :)。访问.visitDate = 访问节点.访问日期;在这里我收到一个错误:类型强制失败:无法将 XMLList@1d76eee9 转换为日期。我需要格式化日期吗?如何取悦。
    • 对不起,我的错......新日期(字符串)修复了它。非常感谢法希姆。欣赏它。我会将您的答案标记为正确。非常感谢 :)。如果还有问题会回到这里:)
    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 2011-07-23
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多