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