DataGrid with data paging
Hi,
I have seen many examples of data paging using a Flex DataGrid: http://www.jamesward.com/2010/10/11/data-paging-in-flex-4/
This essentially means that as the user scrolls the DataGrid only the data needed is requested and displayed (essential for m app as users could have 1000's of records). I was wondering if anyone has any examples of doing this with a Flash DataGrid rather than Flex as my project is pure AS3.
Regards,
Scott
hI,
I've been through these excellent tutorials but none of them seem to load the data on demand, they just load the data all at once rather than when the user scrolls.
Thanks
Similar Messages
-
FB4b1: Datagrid with data driven Combobox
Hi,
I would like to implement a datagrid with a datadriven combox in FB4b1.
The database should store "only" values, but should show a different labeltext in the grid.
When the users load this Grid the stores values should be uses to set the comboboxes.
That sounds easy but I haven't found a easy way to implement that!
1.) I need to overrite the "save column" function, so that the shown labeltext is not saved, but its db-values.
How can I do this?
2.) I need to build the combox in the datagrid, but there is nnothing like"combox.value="myValID" ( that would be all in vb.net)
Do I have to loop manually over the selectedIndex until I found my savedValue?
Like
http://www.boyzoid.com/blog/index.cfm/2006/11/22/Flex-Custom-Components-and-Custom-Methods
Is there an easier way to do this?
Thanks for any pointers!
Martin ZachEach item in comobobox has a label and a data value associated with it.
The following should work if you were to access data of a selected combo box item, without looping through the items. If it is a string value then
mylabel.text = myCombo.selectedItem.data.toString() would show / store the associated data with the combobox item for the label text, you can replace mylabel with the datagrid's dataprovider for your requirements.
Hope this helps
-Sunil -
HELP Filling a datagrid with data from various tables
MHI, this is simple.
I have 2 tables.
ORDERS and CLIENTS.
table ORDERS are columns: order_id, client_id, status
table CLIENTS are columns: client_id, client_name
my datagrid would have the columsn: order_id, client_name, status.
Thats all. I can't simply do it in Flex. HELP PLEASE.
These are my approaches:
1 - tried to create a new array collection with mixed data from these 2 tables to use as dataprovider in the datagrid.
even the ac is [Bindable], the datagrid won't update. Probably Im creating the ac in a wrong way.
2 - tried to use the ORDERS table call responder lastResult property (that works out to fill the data grid) and add a new colounm (client_name) within each item inside the ORDERS array collection.
I'm not able to ADD a property/field/column inside the ac. Of course, when I use .addItem, it will create a new "order" not a new "order.property"
if something like: ac.source[i].push({client_name:clientName}) worked...
My goals are simple. To fill the datagrid with those data.
Ah.. i almost forgot...
supose CLIENTS have 1000 registers.
I don't have to bring all those registers within flex to look for only one ID to retrieve a name to fill the orders datagrid, right?
THANKS A LOT
btp~Ok, this is my first approach:
this function is an auto-generated event that happens when I drag a databank operator over a datagrid. Datagrid's dataprovider IS set to "orders":
(in my browser, the following messed lines only show decent while editting. Maybe copy it into a editor to better visualize: )
protected function getOrders_pagedResult_resultHandler(event:ResultEvent):void { orders = getOrders_pagedResult.lastResult //1 - this was previous declared as a Bindable Array Collection. var ta:Array = new Array; for (var t:String in event.result) { var tp:Array = new Array(); tp.push(getOrders_pagedResult.lastResult[t].order_id); //is it any difference to get data like in THIS LINE tp.push(event.result[t].status) //or THIS? var cn:String = getClientsByID(event.result[t].client_id); //this won't work in time. The getClientsByID delays to get data. var obj:Object = {client_name:cn}; //so cn, in this line, will be "null". How can I handle this? tp.push(obj); ta.push(tp) } orders.source.push(ta) //this is what I wanted datagrid to show, but it doesn't. //if I leave the first statement, everything above is ignored //if I comment the first line, datagrid shows nothing. }
I realize that the code above won't work because the properties inside each item won't have a "label" to datagrid to call in dataField property...I don't know how to do that. I thought by creating an object (like the obj above) it would work... it wont.
My getClientsByID is a modificated auto-generated function which doesn't work properly:
(in my browser, the following messed lines only show decent while editting. Maybe copy it into a editor to better visualize: )
protected function getClientsByID(itemID:int):String { getClientsByIDResult.token = clientsService.getClientsByID(itemID); return(getClientsByIDResult.lastResult.name); }
It seems it doesn't work (returns null) because the function runs faster than the call responder result.
Creating a listener for everything seems to be not the best practice, but a band-aid...
Again.
I should create a class in php to return the "ready-to-use" data. Ok?
Thanks a lot for your comments. Do I miss any important part of the code?
Btp~ -
How to populate DataGird with data returned from php page?
Hi, I'm new in Flex, I try to populate DataGrid with data from PHP, My code is
<mx:HTTPService
id="personRequest" result="getPerson(event)" url=http://localhost/searchPerson.php useProxy="false" method="POST" showBusyCursor="true" resultFormat="e4x">
</ mx:HTTPService>
<mx:DataGrid
id="searchResult" dataProvider="{???what to paste here???}" y="30">
</mx:DataGrid>
private
function getPerson(evt:ResultEvent):void { var res:XMLList = evt.result..dane as XMLList;searchResults =
new XMLListCollection(res);
output from PHP
<person>
<dane>
<name>ABC</name>
<street>XLXXLX</street>
</dane>
<dane>
<name>DEF</name>
<street>YAYAYAY</street>
</dane>
</person>
If I set the dataProvider as "searchResults" it doesn't work. I probably have to set as dataprovider any ArrayCollection , but I don't know how to convert my XMLListCollection to it.
Could anyone help me populate Datagrid with
name | streer
ABC, XLXXLX
DEF, YAYAYAY
Best Regards,
MariuszThanks for your reply, but I'm afraid it doesn't work :-( Could you browse my code and check what I'm doing wrong???
full mxml code:
<?xml version="1.0" encoding="utf-8"?><mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="personRequest.send()">
<mx:Script><![CDATA[
import mx.rpc.events.ResultEvent;
[Bindable]
public var searchResultsXML:XML;
private function getPerson(evt:ResultEvent):void
{ searchResultsXML = (evt.result
as XML);
trace(searchResultsXML); }
]]></mx:Script>
<mx:HTTPService
id="personRequest" result="getPerson(event)" url=http://localhost/searchPerson.php useProxy="false"
method="POST" showBusyCursor="true" resultFormat="e4x"></mx:HTTPService>
<mx:DataGrid id="searchResult" dataProvider="{searchResultsXML.dane}"></mx:DataGrid>
</mx:Application>
trace statement returns:
<person>
<dane>
<id>1</id>
<nazwisko>Topczewski</nazwisko>
<imie>Mariusz</imie>
<imie2/>
<miejscowosc>Bia?ystok</miejscowosc>
<ulica>Nowogródzka</ulica>
<dom>7B</dom>
<lokal>25</lokal>
</dane>
<dane>
<id>1</id>
<nazwisko>Topczewski</nazwisko>
<imie>Mariusz</imie>
<imie2/>
<miejscowosc>Bia?ystok</miejscowosc>
<ulica>Sybiraków</ulica>
<dom>15</dom>
<lokal>27</lokal>
</dane>
</person> -
Datagrid itemrenderer list rowcount not changing with data
I have a datagrid with an itemrenderer. the itemrenderer is a list component. I populate the list with different values for each datagrid row. this works fine. However, I want the list to reset the rowcount for each datagrid row. This is not happening. if the first datagrid row list box is 3 rows every list box in that column is 3 rows no matter what i do. here's my code:
<mx:List xmlns:mx="http://www.adobe.com/2006/mxml" rowCount="1">
<mx:Script>
<![CDATA[
import mx.utils.ObjectProxy;
import mx.collections.ArrayCollection;
import mx.utils.ArrayUtil;
[Bindable] private var arr:Array;
override public function set data( value:Object ) : void
super.data = value;
if(value != null && value.MEET is ArrayCollection)
var len:Number = value.MEET.length;
arr = new Array();
for each (var obj:ObjectProxy in value.MEET){
arr.push(obj.DAYS);
this.dataProvider = arr;
//labelField = "DAYS";
this.rowCount = len;
else if (value != null && value.MEET is ObjectProxy )
this.rowCount = 1;
this.dataProvider = value.MEET;
this.labelField = "DAYS";
else
this.rowCount = 1;
]]>
</mx:Script>
</mx:List>Hello !
This trick makes my application freeze...
I've just an advancedDatagrid populated with arrays, and a list as renderer on some of its columns... I've got exactly the same problem (rowCount that is always the same, for all of my renderers instances), but your solution doesn't work it out...
Any idea ?
thanks a lot -
I've got my app prototyped quickly with the default settings in Flex Builder 4. Now I'm going back and adding/modifying features to polish the app off.
For this application I'm using PHP5 as the server side.
The data paging is really cool and simple to call using the default settings. However, I'm running into issues with customizing the data paging feature.
This is the default header of the php function that was created for me:
public function getTblbrowserrecord_paged($startIndex, $numItems){...}
Instead of dumping all data back to the function I want to be able to search on certain fields so I created a new function called:
getTblbrowserrecord_search_paged ($szName, $szIP, $szRule, $szURL, $szDateLow, $szDateHigh, $szCode, $startIndex, $numItems ) {...}
The new function is tested and operates as designed.
I set the input types of the variables and return type (Tblbrowserrecord[]) of the new function then went to enable data paging. The first screen came up and asked me for the key to use which I selected. The next screen came up and asked me for the number of records which I set to 100 then went to select the count operation.
I initially selected the automatically created count() function but it came up with the error " Count operation parameters should match the paged operation parameters list."
So I created another function to match the search function's parameter's list:
public function count_searched($szName, $szIP, $szRule, $szURL, $szDateLow, $szDateHigh, $szCode, $startIndex, $numItems) {...}
But I still ge the error "Count operation parameters should match the paged operation parameters list."
But they DO match. I looked at the default functions that were created by FB4 and noticed that the automatically generated function count() has no parameters and the paged function has the two functions $startIndex and $numItems which are not identical yet they work. I tried removing those two fields from the count function but got the same results.
What am I doing wrong?
Thanks!Nevermind... For some reason my FB4 is not updating correctly. After removing the two control fields at the end of the list AND exiting the app/re-entering everything worked ok. I've been having this issue a lot lately and am thinking that is is a bug of some sort?
-
How to display swf Files and have a datagrid with paging for javaFX
is there any example of javaFX which can display swf files or have a datagrid with paging.
sorry for my bad english and by the way i am new to javaFX
any help wil be appreciatePlease, refrain from posting identical messages in several forums. Thanks.
And I doubt JavaFX can display SWF files (it is a concurrent technology, after all! :-)), unless using some JNI/JNA technology (via JDIC? a long way...).
Datagrid: it is expected in next version (hopefully), there are some implementations around (look for CRUDfx, for example). -
I just upgraded to flash builder 4 from the beta version. I imported my project
and now my datagrid is acting funny. I have data paging enabled. The one thing I
tweaked was on this part:
http://sujitreddyg.files.wordpress.com/2009/06/165.png
Instead of setting the "Count operation" to "count()", I've set it to "None". I
have a large amount of data and setting it to "None" makes the thumb larger so
that users can use it. It also disables the ability to "jump" pages (which uses
a lot of memory if you have a datagrid).
Everything worked fine in the beta version of flash builder but in the non-beta
version I came across a problem: I can initially page (with my mouse wheel) a
few times and then it just stops for no reason. I try to keep scrolling w/ the
mouse wheel and nothing. However, if I click on a row, then it will get another
page. I have to continue to click on the rows in order to get another page.
Annoying, to say the least.
Anyone notice this? I didn't change anything so figured it must be the updated
version. (You can see for yourself w/ your own project...just change the Count
operation to "none" and then try to page through the datagrid).....any
suggestions?Can you please file a bug with a simple test case @ http://bugs.adobe.com/flex and we can take a look.
Thanks,
Peter -
Hi again, developers:
I'm in a search of a datagrid with certain characteristics:
- variableRowHeight = "true"
- only one column
- each row must have a custom item renderer with possibly different heights, and a fixed width
- the datagrid must show always every item in the data provider with no vertical scroll bars, what means that the datagrid height must have always the exact height sum of all the item renderers it is displaying.
- and no extra empty rows must appear in the last positions of the datagrid
The last two requirements are something difficult to achieve... for some reason, empty rows appear at the last positions of the datagrid. I post what i've managed to get:
<mx:Script>
<![CDATA[
private function resize():void
if (dg.dataProvider)
var h:Number = dg.measureHeightOfItems( -1, dg.dataProvider.length);
dg.height = h;
]]>
</mx:Script>
<mx:DataGrid id="dg" width="530" horizontalCenter="0" verticalScrollPolicy="off"
dataProvider="{dp}"
wordWrap="true" variableRowHeight="true" showHeaders="false" dataChange="resize()" height="{dg.measureHeightOfItems(-1,dg.dataProvider.length)}" click="Alert.show(dg.rowCount.toString());">
<mx:columns>
<mx:DataGridColumn headerText="ID" width="50">
<mx:itemRenderer>
<mx:Component>
<mx:TextArea height="{Math.random()*100}" wordWrap="true" backgroundColor="{Math.random() * 16777216}" paddingTop="0" paddingBottom="0"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>Thanks Harui, but it doesn't help. If the border is set it will help, but the very big problem is the empty rows that appear at the end of the datagrid... I can't find a way of measuring correctly the height of the itemRenderers!
I'll update this thread if I manage to do it. -
Strange Behaviour on DataGrid with ArrayCollection as DataProvider
I have a Datagrid with an ArrayCollection as DataProvider, the arrayCollection is partially generated by a remoteObject call, the dataprovider seems to works at least until I try to edit the field...
By the RemoteObject I only receive an ArrayCollection with the field `ip`, but the datagrid looks for the fields ip, check and save...
If I add/edit this new field it works, but only under particular condition
The DataGrid:
<s:DataGrid id="datagrid" left="10" right="10" top="136"
dataProvider="{listaIPCheck}" bottom="10" requestedRowCount="4">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="ip" headerText="Asset"/>
<s:GridColumn dataField="check" headerText="Inventory"/>
<s:GridColumn dataField="save" headerText="Salvataggio"/>
</s:ArrayList>
</s:columns>
</s:DataGrid>
The Script:
[Bindable]private var listaIPCheck:ArrayCollection;
private function ro_resultHandler(event:Event=null):void
listaIPCheck = new ArrayCollection();
listaIPCheck = ro.getListUpdate.lastResult;
heap = 0;
// Read Below {POINT #1}
init3();
private function init3():void
// Read Below {POINT #2}
if (heap<listaIPCheck.length)
// omitted the initialization of the process p
p.addEventListener(NativeProcessExitEvent.EXIT, onExit);
try{
p.start(startupInfo);
}catch(e:Error){}
private function onExit(e:NativeProcessExitEvent):void {
// Read below {POINT #3}
Here is my code, now as you can see there are 3 line where I wrote to read below...
Let's assume to put this simple `for` instead of the commented line (once at a time)
for (var k:Number=0;k<listaIPCheck.length;k++)
listaIPCheck.getItemAt(k).check = "checkVal";
listaIPCheck.getItemAt(k).save = "saveVal";
This code always work in the 3 points, so at the end of the call the ArrayCollection is always filled with the new values, but the datagrid refresh the items only in POINT #1 and POINT #2
Why not in Point #3???Thank you Amy, but adding the properties in the server side did not work...
The workflow of the program is that:
1) I get the ArrayCollection (listaIPCheck) contatining some information (function ro_resultHandler)
2) I start an external process and grab the output data (function init3)
3) read and use the data from the process (function onExit)
Now the problem I have is regarding the refresh of the datagrid, this datagrid has the ArrayCollection (listaIPCheck) as DataProvider.
So:
- If I put the for loop instead of the comments ( // Read Below {POINT #1} ) or
( // Read Below {POINT #2} ) it works, the ArrayCollection is updated and the datagrid is refreshed
- Whereas if I put the for loop instead of ( // Read Below {POINT #3} ) , it won't work.. or at least, the ArrayCollection is correctly updated, but the datagrid is not refreshed at all and I have to use .refresh() -
Creating hyperlink on DataGrid Cell Data
Hi All,
Having created a Datagrid with displays Product names in the 1st column, is it possible to create individual hyperlinks on the data in this column. The result would be that when the User clicks on any one of the Product names a Internet Explorer browser window would open showing more details about the Product selected?
Thanks,
JHere is my column definition for a link:
<mx:DataGridColumn
headerText="View" dataField="link" width="50" editable="
false" textAlign="center">
<mx:itemRenderer>
<fx:Component>
<mx:LinkButton label=". . ." color="blue" fontSize="16" fontWeight="
bold">
</mx:LinkButton>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
You will need to set a click listener for LinkButton. To open a new window I use this:
reportString =
"window.open('" + reportString + "',
ShipInfo', 'status=0,toolbar=0,resizable=yes')";ExternalInterface.call(reportString);
Basically it is a JavaScript window.open method.
HTH -
Editable DataGrid With DateField
I'm new to flex and struggling with the editable DataGrid. I
have a DataGrid with an ItemRenderer that outputs a DateField. I
can't figure out how to get the new value of the DateField after
the edit.
Here is my DataGrid (the endDate column):
<mx:DataGrid id="allHistoryGrid"
dataProvider="{allEntries}" height="313" width="782" y="-4"
itemEditEnd="saveGridChange(event)" editable="true">
<mx:columns>
<mx:Array>
<mx:DataGridColumn dataField="dietDescription"
headerText="Diet"/>
<mx:DataGridColumn dataField="allergyDescription"
headerText="Allergy"/>
<mx:DataGridColumn dataField="labDescription"
headerText="Lab"/>
<mx:DataGridColumn dataField="labResult" width="50"
headerText="Result" itemRenderer="LabResultItemRenderer"/>
<mx:DataGridColumn dataField="medicationDescription"
headerText="Medication"/>
<mx:DataGridColumn dataField="height" width="65"
headerText="Height" itemRenderer="HeightItemRenderer"/>
<mx:DataGridColumn dataField="weight" headerText="Weight"
itemRenderer="WeightItemRenderer"/>
<mx:DataGridColumn dataField="bmi" width="35"
headerText="BMI" itemRenderer="BmiItemRenderer"/>
<mx:DataGridColumn dataField="circumference" width="45"
headerText="Circ." itemRenderer="CircumferenceItemRenderer"/>
<mx:DataGridColumn headerText="Start Date" width="75"
sortCompareFunction="startDateSortCompare">
<mx:itemRenderer>
<mx:Component>
<mx:VBox clipContent="false">
<mx:DateFormatter id="dateFormatter"
formatString="MM/DD/YYYY"/>
<mx:Text width="100"
text="{dateFormatter.format(data.startDate)}"/>
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn dataField="endDate" width="45"
headerText="End Date" itemRenderer="EndDateItemRenderer"
rendererIsEditor="true"/>
<mx:DataGridColumn id="deleteEntry" width="50"
textAlign="center"
headerText="Delete" sortable="false"
itemRenderer="DeleteItemRenderer"/>
</mx:Array>
</mx:columns>
</mx:DataGrid>
Here is my itemRenderer:
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="
http://www.adobe.com/2006/mxml"
paddingLeft="16" horizontalAlign="center">
<mx:DateFormatter id="dateFormatter"
formatString="MM/DD/YYYY"/>
<mx:DateField x="16" y="67" id="AllHistoryEndDate"
text="{dateFormatter.format(data.endDate)}"/>
</mx:VBox>
How do I get the new value in the saveGridChange function?
private function saveGridChange(event:DataGridEvent):void {That gives me this error:
TypeError: Error #1034: Type Coercion failed: cannot convert
EndDateItemRenderer@51a70a1 to mx.controls.TextInput. -
DataGrid with Custom Component not showing sub-components
I'm hoping someone can enlighten me on this issue.
I have a datagrid with one column which has an item renderer. It doesn't matter if the "text" data comes from a dataProvider or is static.
If I do the following, only the first label will show up.
<mx:DataGridColumn headerText="Column Title">
<mx:itemRenderer>
<mx:Component>
<mx:VBox>
<mx:Label text="{data.data1}" />
<mx:Label text="{data.data2}" />
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
However, if I change the VBox to a HBox both labels will show up.
<mx:DataGridColumn headerText="Column Title">
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:Label text="{data.data1}" />
<mx:Label text="{data.data2}" />
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
I'm using:
Flex Builder 3 Standalone
Version: 3.0.214193
OS: Vista
Any ideas or comments would be appreciated.Thanks for the reply KomputerMan.com. I've tried changing the dimensions of the VBox and no other labels appeared. Usually, when there is not enough room within the datagrid cell scrollbars will appear - you can experiment with the example below to see what I mean.
As for radiobuttons in a datagrid, here you go. The DataGrid and its dataProvider are constructed in the same way you normally would.
<mx:DataGridColumn headerText="Approve/Deny/Pending" width="170">
<mx:itemRenderer>
<mx:Component>
<mx:HBox height="27" paddingLeft="10">
<mx:Script>
<![CDATA[
private function isSelected(s:Object, val:String):Boolean {
if ( s.toString() == val) {
return true;
} else {
return false;
]]>
</mx:Script>
<mx:RadioButton groupName="approveType"
id="approved"
label="A"
width="33"
click="data.status='1'"
selected="{isSelected(data.status, '1')}"/>
<mx:RadioButton groupName="approveType"
id="denied"
label="D"
width="33"
click="data.status='2'"
selected="{isSelected(data.status, '2')}/>
<mx:RadioButton groupName="approveType"
id="Pending"
label="P"
width="33"
click="data.status='3'"
selected="{isSelected(data.status, '3')}/>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn> -
DataGrid with dynamic comboboxes
I need to design a dataGrid with comboboxes in one column. These comboboxes should all have different dataProviders based on a value from column 1. What would a general approach be?
ThanksThe renderer's data property is the data for the entire row so you can get the column1 data and assign the combobox's dataprovider accordingly.
Alex Harui
Flex SDK Developer
Adobe Systems Inc.
Blog: http://blogs.adobe.com/aharui -
Dynamic DataGrid with Preferred columns
Hi all,
I want to populate a dynamic DataGrid with User Preferred
columns (ex : EmpId,First Name and Phone). Each time columns may
change based on User Selection in Preferences Page so columns
should not hard code. I'm able to see data for EmpId, First Name
but I want to see the Inner tag data of "Phone" as a Field.
Sample XML ....
<emp>
<empId>1002</empId>
<firstName>Smith</firstName>
<lastName>John</lastName>
<address>
<city>Ohio>
<phone>433-234-322</phone>
<zip>60003</zip>
</address>
</emp>
Thanks.To display nested data, you must use a labelFunction. I have
several labelFunction examples on cflex.net.
You can assign a function reference to the column's
labelFunction property in the column generation code.
Tracy
Maybe you are looking for
-
External HD's won't mount (& more) after update to 10.3.9
I updated from OS 10.3.2 to 10.3.9 using the Apple updater utility. After the update, external hard drives won't mount unless they are on when I boot up the computer. Also music cd's won't mount, but data cd's do. The only way I can eject the music c
-
When trying to run an Adobe Form webdynpro app, I am receiving the following error: <b>Invalid Response Code: (401) Unauthorized. The requested URL was:"http://localhost:50000/AdobeDocumentServices/Config?style=document"</b> I have checked the ADS te
-
Acrobat 9 Pro crash problem.
Hello board, My computer just got Windows 7 installed, and now when I have a PDF and click the e-mail icon instead of simpy opening an e-mail with the PDF as an attachment, Acrobat crashes. Apparently it's because some "mail exchange" thing inside Wi
-
HT4102 Login screen uses language which is not the system's default (English)
My login screen seems to use the last chosen language on the system, not the default language (English), what makes my password be written in a different language. In my case it's enough if I hit caps-lock (when it's hit in the other language, it cha
-
Import of photos from iPad frozen and cannot close i photo or disconnect iPad
import of photos from i-pad to i-mac has stalled midstream. Cannot close i-photos or disconnect pad from mac. How do I proceed please?