-1
private void moviesGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    MovieDetailsForm form = new MovieDetailsForm(MovieDetailsForm.MovieViewMode.Read);

    if (e.ColumnIndex==5)
    {
         form.ShowDialog();
    }
}

datagridview の詳細表示ボタンを押して映画の詳細を表示しようとしていますが、何らかの理由で機能しません。datagridview のボタンの位置は 5 です。

SSを表示したいのですが、残念ながらまだ表示できません。

4

3 に答える 3

2

datagridview のボタンの場所は 5 です

列が5列目ということですか?

はいの場合、.Net のインデックスは一般にゼロベースの indexであることを忘れないでください。したがって、次のようになります。

if (e.ColumnIndex==4)

また、KyleMit からの良い意見MovieDetailsFormです。使用しない場合はインスタンスを作成しないでください。

if (e.ColumnIndex==4)
{
     MovieDetailsForm form = new MovieDetailsForm(MovieDetailsForm.MovieViewMode.Read);
     form.ShowDialog();
} 
于 2013-08-20T14:47:40.110 に答える
1

他の人が言ったことを要約し、あなたのコーディングスタイルを助けるために...

private void moviesGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
  if (dataGridView1.Columns["colDetailButton"].DisplayIndex == e.ColumnIndex)
  {
    // my guess is you also need other data, like the movie's IMDB number
    string imdbValue = dataGridView1.Rows[e.RowIndex].Cells["colImdbValue"].Value.ToString();
    using (var form = new MovieDetailsForm(MovieDetailsForm.MovieViewMode.Read))
    {
      form.ImdbValue = imdbValue;
      form.ShowDialog();
    }
  }
  else
  {
    // Remove this debugging code once you get your code working
    Console.WriteLine("ColumnIndex {0} was clicked." e.ColumnIndex);
  }
}
于 2013-08-20T15:29:51.177 に答える
0

Datagridview のボタン列でクリック イベントを処理する方法については、この回答を参照してください。何をすべきかの良い概要のために。ボタンが 1 つしかない限り、実際には列インデックスを指定する必要はまったくないため、コードが変更されにくくなります。ColumnIndexChris の言うとおりですが、そのインデックスは 0 ベースであるため、5 番目の列を取得するには 4 が必要です。また、実際にフォームを表示したい場合を除き、フォームを新しくする必要はないので、次のように宣言を if ステートメントに移動します。

private void moviesGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    //make sure click not on header and column is type of ButtonColumn
    if (e.RowIndex >= 0 && ((DataGridView)sender).Columns[e.ColumnIndex].GetType() ==  _
                           typeof(DataGridViewButtonColumn))
    {
         MovieDetailsForm form = new MovieDetailsForm(MovieDetailsForm.MovieViewMode.Read);
         form.ShowDialog();
    }
}
于 2013-08-20T15:14:00.537 に答える