private void albumView_SelectionChanged(object sender, EventArgs e)
        {
            if (albumView.SelectedRows.Count > 0)
            {
                picAmazonImage.Image = null;
                AmazonItemInfo aii = amazonItemInfoList[albumView.SelectedRows[0].Index];
                picAmazonImage.InitialImage  = Image.FromFile(LinearGlobal.StyleDirectory + "\\loading.gif");
                picAmazonImage.ImageLocation = aii.ImageUrl;

                trackView.DataSource = aii.Tracks;
            }
        }
        private void trackView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (albumView.SelectedRows.Count > 0)
            {
                int            albumIndex = albumView.SelectedRows[0].Index;
                int            trackIndex = trackView.SelectedRows[0].Index;
                AmazonItemInfo aii        = amazonItemInfoList[albumIndex];

                txtTitle.Text   = aii.Tracks[trackIndex].TrackName;
                txtArtist.Text  = aii.Artist;
                txtAlbum.Text   = aii.Title;
                txtTrackNo.Text = aii.Tracks[trackIndex].TrackNumber.ToString();
                //txtGenre.Text = gi.Genre;
                txtYear.Text = aii.ReleaseDate.Split('-')[0].Trim();
            }
        }
        /// <summary>
        /// アルバム一括タグ更新
        /// </summary>
        private void allAlbumTrackUpdate(bool isTrackNoSort)
        {
            if (!isValid())
            {
                return;
            }

            // IDを取得する
            long id = FileInfoList[0].Id;

            // 更新対象を取得する
            List <DbParameter> paramList = new List <DbParameter>();

            paramList.Add(new SQLiteParameter("Id", id));

            string sql = SQLResource.SQL048;

            if (isTrackNoSort)
            {
                sql += "ORDER BY ALBUM, ABS(TRACK), ID";
            }
            else
            {
                sql += "ORDER BY ID";
            }

            object[][] resultList = SQLiteManager.Instance.executeQueryNormal(sql, paramList);

            // amazonAlbumListをループ
            int            i          = 0;
            int            albumIndex = albumView.SelectedRows[0].Index;
            AmazonItemInfo aii        = amazonItemInfoList[albumIndex];

            foreach (var amazonItemTrackInfo in aii.Tracks)
            {
                if (resultList.Length >= i + 1)
                {
                    GridItemInfo gi = new GridItemInfo();
                    gi.Id = long.Parse(resultList[i][0].ToString());
                    if (String.IsNullOrEmpty(resultList[i][2].ToString()))
                    {
                        gi.FilePath = resultList[i][1].ToString();
                    }
                    else
                    {
                        gi.FilePath = Path.Combine(LinearGlobal.TempDirectory, resultList[i][2].ToString());
                        gi.Tag      = resultList[i][1].ToString();
                        gi.Option   = resultList[i][2].ToString();
                    }

                    gi.Genre = resultList[i][4].ToString();

                    // 更新する対象
                    gi.Title  = amazonItemTrackInfo.TrackName;
                    gi.Artist = aii.Artist;
                    gi.Album  = aii.Title;
                    gi.Track  = amazonItemTrackInfo.TrackNumber;
                    if (aii.ReleaseDate.Length >= 4)
                    {
                        gi.Year = aii.ReleaseDate.Substring(0, 4);
                    }
                    gi.Picture = picAmazonImage.Image;

                    gi.Selection = (int)EnumMode.SINGLE;

                    LinearGlobal.StockTagEditList.Add(gi);
                }
                i++;
            }

            /*
             * // id, filepath, option, track
             * foreach (var record in resultList)
             * {
             *  GridItemInfo gi = new GridItemInfo();
             *  gi.Id = long.Parse(record[0].ToString());
             *  if (String.IsNullOrEmpty(record[2].ToString()))
             *  {
             *      gi.FilePath = record[1].ToString();
             *  } else
             *  {
             *      gi.FilePath = Path.Combine(LinearGlobal.TempDirectory, record[2].ToString());
             *      gi.Tag = record[1].ToString();
             *      gi.Option = record[2].ToString();
             *  }
             *
             *  gi.Track = int.Parse(record[3].ToString());
             *  gi.Genre = record[4].ToString();
             *
             *  if (gi.Track-1 >= 0)
             *  {
             *      //int albumIndex = albumView.SelectedRows[0].Index;
             *      int trackIndex = gi.Track - 1;
             *      //AmazonItemInfo aii = amazonItemInfoList[albumIndex];
             *
             *      // 更新する対象
             *      gi.Title = aii.Tracks[trackIndex].TrackName;
             *      gi.Artist = aii.Artist;
             *      gi.Album = aii.Title;
             *      gi.Track = aii.Tracks[trackIndex].TrackNumber;
             *      gi.Year = aii.ReleaseDate.Split('-')[0].Trim();
             *      gi.Picture = picAmazonImage.Image;
             *
             *      gi.Selection = (int) EnumMode.SINGLE;
             *
             *      LinearGlobal.StockTagEditList.Add(gi);
             *
             *  }
             * }*/

            Action saveTagAction = () =>
            {
                var saveTagResult = LinearAudioPlayer.PlayController.saveTag();
                if (saveTagResult.Count > 0)
                {
                    Action uiAction = () =>
                    {
                        LinearAudioPlayer.PlayController.saveTagEnd(saveTagResult);
                    };
                    LinearGlobal.MainForm.ListForm.BeginInvoke(uiAction);
                }
            };

            LinearAudioPlayer.WorkerThread.EnqueueTask(saveTagAction);

            // TODO:いる?
            if (LinearGlobal.StockTagEditList.Count > 0)
            {
                Action getPcitureAction = () =>
                {
                    LinearAudioPlayer.PlayController.getPicture(gi);


                    Action uiAction = () =>
                    {
                        if (this.IsHandleCreated)
                        {
                            ArtworkLoad(gi);
                        }
                    };
                    this.BeginInvoke(uiAction);
                };
                LinearAudioPlayer.WorkerThread.EnqueueTask(getPcitureAction);

                this.Hide();
            }
        }