DataGridView e.columnindex无效

时间:2013-08-20 13:41:08

标签: c# datagridview

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,但不幸的是我还不能。

3 个答案:

答案 0 :(得分:2)

  

datagridview中按钮的位置是5

这意味着该列是第五列?

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

if (e.ColumnIndex==4)

此外,来自KyleMit的好评,如果您不使用它,请不要创建MovieDetailsForm的实例:

if (e.ColumnIndex==4)
{
     MovieDetailsForm form = new MovieDetailsForm(MovieDetailsForm.MovieViewMode.Read);
     form.ShowDialog();
} 

答案 1 :(得分: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);
  }
}

答案 2 :(得分:0)

有关如何How to handle click event in Button Column in Datagridview?的详细信息,请参阅此答案。只要你只有一个按钮,你实际上根本不需要指定列索引,这使你的代码不易变化。虽然,Chris是对的,但索引是基于零的,因此您需要ColumnIndex为4才能获得第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();
    }
}