Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView e.columnindex不工作_C#_Datagridview - Fatal编程技术网

C# DataGridView e.columnindex不工作

C# DataGridView e.columnindex不工作,c#,datagridview,C#,Datagridview,当我按下datagridview中的view details(查看详细信息)按钮时,我试图查看电影的详细信息,但由于某些原因,我无法让它工作。 datagridview中按钮的位置为5 我想展示一个ss,但不幸的是我还不能 datagridview中按钮的位置为5 这意味着该列是第五列 如果是,请不要忘记.Net中的索引通常是基于零的索引。因此,这将是: private void moviesGridView_CellContentClick(object sender, DataGridVie

当我按下datagridview中的view details(查看详细信息)按钮时,我试图查看电影的详细信息,但由于某些原因,我无法让它工作。 datagridview中按钮的位置为5

我想展示一个ss,但不幸的是我还不能

datagridview中按钮的位置为5

这意味着该列是第五列

如果是,请不要忘记.Net中的索引通常是基于零的索引。因此,这将是:

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

    if (e.ColumnIndex==5)
    {
         form.ShowDialog();
    }
}
另外,KyleMit说得很好,如果不使用它,请不要创建
MovieDetailsForm
的实例:

if (e.ColumnIndex==4)

关于如何操作,请参阅此答案,以获得关于如何操作的良好概述。只要您只有一个按钮,实际上根本不需要指定列索引,这样代码就不容易修改。尽管Chris是对的,索引是以零为基础的,因此需要
ColumnIndex
为4才能得到第5列。您也不必重新创建表单,除非您确实想要显示它,所以我将声明移动到if语句中,如下所示:

private void moviesGridView\u CellContentClick(对象发送方,DataGridViewCellEventArgs e)
{
//确保单击不在标题上,列的类型为ButtonColumn
如果(e.RowIndex>=0&((DataGridView)发件人)。列[e.ColumnIndex]。GetType()=_
类型(DataGridViewButtonColumn))
{
MovieDetailsForm form=新的MovieDetailsForm(MovieDetailsForm.movievieviewmode.Read);
form.ShowDialog();
}
}

只需总结一下其他人所说的,并帮助您改进编码风格

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

请解释一下
的含义,我无法让它工作。你有什么异常吗?
我无法让它正常工作
你能更具体、更详细地说明问题的实质吗?我没有收到任何错误,只是什么都没有发生,我希望它在我按下datagridview中的按钮时显示电影详情窗体。当我将第一个单元格的值存储到标记中时,为什么不与您感兴趣的DataGridViewColumn的
.ColumnIndex
属性进行比较,而不是与固定值(即5)进行比较?这样,以后决定重新排列/添加/删除列就无关紧要了。另外,为什么不设置一个断点,按下按钮column并检查
e.ColumnIndex
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);
  }
}