-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

这意味着该列是第五列?

如果是,请不要忘记 .Net 中的索引通常是从零开始的索引。所以它会是:

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 的按钮列中处理单击事件的问题,请参阅此答案?了解如何做的一个很好的概述。只要您只有一个按钮,您实际上根本不必指定列索引,这使您的代码不易更改。虽然,克里斯是对的,但索引是从零开始的,所以你需要ColumnIndex4 才能获得第 5 列。除非您真的想显示它,否则您也不必更新您的表单,所以我会将声明移动到 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 回答