我有一个填充了文本文件的数据网格,该文件具有逐行字(即每行一个)。数据网格有5列。文本文件中的每5个单词都放在一个新行中。然后可以添加或删除数据网格。我将如何使用datagrid中的所有值重写文本文件?
这就是数据网格的填充方式。如何遍历整个datagrid单元格以获取单元格并重写文本文件中的数据?
var loadFavourites: URLLoader = new URLLoader();;
var arFavourites = new Array();
loadFavourites.addEventListener(Event.COMPLETE, onLoadedFavourites);
loadFavourites.load(new URLRequest("lists/Favourites.txt"));
function onLoadedFavourites(event:Event):void
{
arFavourites = event.target.data.split("\r\n");
for (var i:int = 0; i <= arFavourites.length; i++)
{
if (i != 0 && i % 5 == 0)
{
dg.addItem({Place: arFavourites[i-5],Subject:arFavourites[i-4],Object:arFavourites[i-3],Feeling:arFavourites[i-2],Action:arFavourites[i-1]});
}
}
}
添加记录:
var i:int=0;
var tPlace = mc_places.mc_places_text.txtPlaces.text;
var tSubject = mc_subject.mc_subject_text.txtSubject.text;
var tObject = mc_object.mc_object_text.txtObject.text;
var tFeeling = mc_feeling.mc_feeling_text.txtFeeling.text;
var tAction = mc_action.mc_action_text.txtAction.text;
arFavourites[FavCount+1]=tPlace;
arFavourites[FavCount+2]=tSubject;
arFavourites[FavCount+3]=tObject;
arFavourites[FavCount+4]=tFeeling;
arFavourites[FavCount+5]=tAction;
dg.addItem({Place: arFavourites[FavCount+1],Subject:arFavourites[FavCount+2],Object:arFavourites[FavCount+3],Feeling:arFavourites[FavCount+4],Action:arFavourites[FavCount+5]});
dg.scrollToIndex(dg.length-1);
FavCount=FavCount+5;
for (i=0; i<arFavourites.length; i++) {
trace(arFavourites[i]);
}
删除记录:
var k:int;
var i:int;
trace("Selected Index: " + dg.selectedIndex);
if (dg.length == 0) {
return;
}
for (k=0; k<dg.length; k++) {
if (dg.isItemSelected(dg.getItemAt(k))) {
for (i=0; i<arFavourites.length; i++) {
if (arFavourites[i] == dg.getItemAt(k)[1]) {
arFavourites.splice(i,1);
}
if (arFavourites[i] == dg.getItemAt(k)[2]) {
arFavourites.splice(i,1);
}
if (arFavourites[i] == dg.getItemAt(k)[3]) {
arFavourites.splice(i,1);
}
if (arFavourites[i] == dg.getItemAt(k)[4]) {
arFavourites.splice(i,1);
}
if (arFavourites[i] == dg.getItemAt(k)[5]) {
arFavourites.splice(i,1);
}
}
dg.removeItemAt(k);
dg.scrollToIndex(k);
dg.clearSelection();
break;
}
}
答案 0 :(得分:1)
好吧,我会做的基本上就是反过来。首先,您获得DataGrid
的值,然后按照与之前相同的顺序将它们放回Array
:
var newFavArray:Array = new Array();
for (var i:int = 1; i <= dg.length; i++)
{
newFavourites[i * 5 - 5] = dg.getItemAt(i - 1).Place;
newFavourites[i * 5 - 4] = dg.getItemAt(i - 1).Subject;
newFavourites[i * 5 - 3] = dg.getItemAt(i - 1).Object;
newFavourites[i * 5 - 2] = dg.getItemAt(i - 1).Feeling;
newFavourites[i * 5 - 1] = dg.getItemAt(i - 1).Action;
}
(如果你能找到一种更好的方法来使用i
来访问Array
而DataGrid
可以随意使用它,我会相当快速地鞭打它。)
然后将其转换为String
:
var newFavString:String = newFavArray.join("\r\n");
然后最后将它保存到文件中然后你想要(当然覆盖旧的值)。由于它是AIR应用,因此最好使用File
和FileStream
类:
var favFile:File = File.applicationStorageDirectory.resolvePath("lists/Favourites.txt");
var favStream:FileStream = new FileStream();
favStream.open(favFile, FileMode.WRITE);
favStream.writeUTFBytes(newFavString);
favStream.close();
我不确定您的工作流程是什么,但我个人将所有这些都放在一个功能中:
function saveFavourites():void
{
var newFavArray:Array = new Array();
for (var i:int = 1; i <= dg.length; i++)
{
newFavArray[i * 5 - 5] = dg.getItemAt(i - 1).Place;
newFavArray[i * 5 - 4] = dg.getItemAt(i - 1).Subject;
newFavArray[i * 5 - 3] = dg.getItemAt(i - 1).Object;
newFavArray[i * 5 - 2] = dg.getItemAt(i - 1).Feeling;
newFavArray[i * 5 - 1] = dg.getItemAt(i - 1).Action;
}
var newFavString:String = newFavArray.join("\r\n");
var favFile:File = File.applicationStorageDirectory.resolvePath("lists/Favourites.txt");
var favStream:FileStream = new FileStream();
favStream.open(favFile, FileMode.WRITE);
favStream.writeUTFBytes(newFavString);
favStream.close();
}
您可以随时运行。
如果您以前没有使用File
和FileStream
,那么检查它们并了解它们是如何工作的,是值得的。它们仅在AIR中可用,但它们比URLRequest
和URLLoader
更好,更优越。您可能还想使用它们来加载文件。它们仅对本地文件有用,如果文件在线或其他什么,那么我确定URLLoader
没问题。