1

100 行以上の XML ファイルから DataSet をロードしましたが、一度に 15 行 (要件) しか DataGridView に表示できません。ユーザーの操作はありません。10 秒のタイマーが次の 15 行に移動します。

FileStream stream = new FileStream("file.xml", FileMode.Open); 
ds.readXml(stream); 
Stream.Close(); 
datagridview1.DataSource = ds.Tables[0]; 
ds.Tables[0].DefaultView.Sort = "start asc"; 

XML ファイル

<?xml version="1.0" standalone="yes"?> 
<Table> 
  <hours> 
    <Start>10:00 AM</Start> 
    </hours> 
<hours> 
    <Start>11:00 AM</Start> 
    </hours> 
<hours> 
    <Start>1:00 PM</Start> 
    </hours> 
<hours> 
    <Start>2:00 PM</Start> 
    </hours> 
</Table> 
4

1 に答える 1

0

あなたのソリューションは、10 秒ごとに 15 レコードのページを表示する単純な LINQ クエリを使用して解決できると思います。

private void BindPageToGrid()
{
    var dsPage = _ds.Tables[0].AsEnumerable()
        .Skip(_nPage * PAGE_SIZE)
        .Take(PAGE_SIZE)
        .Select(x => x);
    datagridview1.DataSource = dsPage.CopyToDataTable<DataRow>();
}

上記の方法を機能させる残りのコードは次のとおりです。

これらの変数が Form クラスにあるとします。

const int PAGE_SIZE = 15; // the number of total items per page
private DataSet _ds;      // the XML data you read in
private  int _nPage;      // the current page to display
private int _maxPages;    // the max number of pages there are

XML をほぼ同じように読み込みますが、DataGridView に異なるデータを送信します。

FileStream stream = new FileStream("file.xml", FileMode.Open);
_ds.ReadXml(stream);
stream.Close();
_ds.Tables[0].DefaultView.Sort = "start asc";

// determine how many pages we need to show the data
_maxPages = Convert.ToInt32(Math.Ceiling(
               (double)_ds.Tables[0].Rows.Count / PAGE_SIZE));

// start on the first page
_nPage = 0;
// show a page of data in the grid
BindPageToGrid();
// increment to the next page, but rollover to first page when finished
_nPage = (_nPage + 1) % _maxPages;

// start the 10-second timer
timer1.Interval = (int)new TimeSpan(0, 0, 10).TotalMilliseconds;
timer1.Tick += timer1_Tick;
timer1.Start();

タイマーティックメソッドは次のとおりです。

void timer1_Tick(object sender, EventArgs e)
{
    timer1.Stop();
    // show a page of data in the grid
    BindPageToGrid();
    // increment to the next page, but rollover to first page when finished
    _nPage = (_nPage + 1) % _maxPages;
    timer1.Start();
}
于 2012-04-15T02:08:19.053 に答える