2011-12-18 11 views
0

私はPlayerオブジェクトに私のDataGridViewにアクセスしたいと思います。 これは私がDataGridViewに私の選手リストをbingingてる方法です:タイプ 'System.Data.DataRowView'のオブジェクトをタイプxxxにキャストできません

PlayerList = new List<Player>(players); 
//Populate Player list heere (...)   
DataTable dt = Tools.ToDataTable<Player>(PlayerList); 
Grid.DataSource = dt; 

そして今、私は、ダブルクリックイベントで選択された行で私のPlayerオブジェクトにアクセスしたい:

private void Grid_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
{ 
    if (Grid.SelectedCells == null) 
    { 
     return; 
    } 
    int row = Grid.SelectedCells[0].RowIndex; 

    //Here I get that exception from the title 
    ((Player)(Grid.Rows[row].DataBoundItem)).KillPlayer();  
} 
+0

わからないが、私はDataTable''に 'List'を変換することによって、あなたは実際の' Player'インスタンスを失うことを前提とはPlayerList [行] .KillPlayer() 'と直接インスタンスにアクセスしてみてくださいそれが動作するかどうかを確認してください。 –

+0

これは、Tools.ToDataTableの機能に大きく依存します。 – sq33G

答えて

1
private void DataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) 
{ 
    Player player = DataGridView1.Rows[e.RowIndex].DataBoundItem as Player; 
} 
1

だけで考え、実行しますあなたは本当にDataTableに変換する必要がありますか?

その後、正常に動作する必要がありますGrid.DataSource = PlayerList;

PlayerList = new List<Player>(players); 
//Populate Player list heere (...)   
Grid.DataSource = PlayerList; 

あなたのコード((Player)(Grid.Rows[row].DataBoundItem)).KillPlayer();経由Grid.DataSourceに直接PlayerListに結合することができるはずです。 `; -

+0

はい。私はデータテーブルを使用する必要があります。ソートが必要です。 – Hooch

+0

フォームに型付きデータセットを追加してグリッドデータソースを設定し、 'PlayerList'ではなくDataSetにデータを設定することを検討しましたか試しましたか?それはあなたが必要とするものを行うはずです。 – Seph

+0

他のデータ構造もソートすることができます。 – sq33G

関連する問題