データセットを介してデータを適用しているグリッドビューを持つwinformがあります。データがバインドされると、SelectionChangedイベントハンドラが呼び出されます。私はそれを調べ、if節を追加してDGVにフォーカスがあるかどうかを調べる方法を見つけました(他のすべての解決策は私が見つけても機能しませんでした)。その部分は計画どおりに働いています。プログラムをステップ実行すると、イベントハンドラはデータをバインドするときにコードを3回実行しようとします。 if節はコードに到達するのを止めます。私の問題は、データがバインドされた後、DGVの行を選択すると、イベントハンドラが "mscorlib.dllで 'System.ArgumentOutOfRangeException'型の未処理例外をスローします。コードをステップ実行するとき、DGVは適切な行インデックスを 'int row'変数に戻していますが、行/セル情報を取得するために使用するコードは 'loadtableID'変数に適用する前にエラーをスローします。私は助けが必要です。一番上の2番目のDGVは無視することができます。選択した行の情報を取得し、別のDBテーブル情報を取得します。また、役立つ場合は、プログラムにデータソースを適用したり、返される個々のデータセットごとにデータセットを作成したりすることはありませんでした。データを返すときにシステムの汎用データセットを使用しています。イベントハンドラwinformを使用してDataGridViewから読み取ろうとするとエラーが発生する
private void gvMainSelectResults_SelectionChanged(object sender, EventArgs e)
{
if (gvMainSelectResults.Focused)
{
gvMainArchiveResults.DataSource = null; //second DGV that is populated later and everytime is cleared with a new selection
loadTableID = 0;
orgID = 0;
dbFileName = "";
sourceType = "";
int row = gvMainSelectResults.CurrentCell.RowIndex;
loadTableID = Convert.ToInt32(gvMainSelectResults.SelectedRows[row].Cells["LoadTableID"].Value); //this is where I get the error, even if the "int row" has the correct index number
orgID = Convert.ToInt32(gvMainSelectResults.SelectedRows[row].Cells["OrganizationID"].Value);
dbFileName = Convert.ToString(gvMainSelectResults.SelectedRows[row].Cells["FileName"].Value);
sourceType = Convert.ToString(gvMainSelectResults.SelectedRows[row].Cells["SourceType"].Value);
more code here...
Rowsコレクションを参照する必要がありrowIndexに値を持つ
、それは別のものです。私は2(gvMainSelectResults、これは人口が占められているもので、gvMainArchiveResultsは最初の情報を使って2番目のデータを生成するので、新しい行を選択するたびに2番目のDGV自体がクリアされ、新しいデータセットが適用されます) 。そのため、gvMainArchiveResultsがコードの先頭に配置されました。 – Terran28
更新コードと備考 – Terran28
が表示されていますが、今問題が見つかりました。答えを更新する – Steve