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,但不幸的是我还不能。
答案 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();
}
}