在WinForms中,`DataGridView`的`CellContentClick`事件只有在点击单元格内容时才会触发。如果你希望在点击单元格的任何部分(包括空白区域)时都能显示所在行的`plc.Name`,可以使用`CellClick`事件。
以下是修改后的代码:
```csharp
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Winform和Wpf的本质不同
{
public partial class Form1 : Form
{
private List<PlcModel> plcModels = new List<PlcModel>();
public Form1()
{
InitializeComponent();
InitializeDataGridView();
}
private void InitializeDataGridView()
{
for (int i = 0; i < 20; i++)
{
plcModels.Add(new PlcModel
{
Id = i + 1,
Name = $"名字{i}",
PlcValue = $"{i}",
Description = $"描述{i}"
});
}
this.dataGridView1.ReadOnly = true;
this.dataGridView1.DataSource = plcModels;
this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
this.dataGridView1.CellClick += dataGridView1_CellClick; // 使用CellClick事件
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && e.RowIndex < dataGridView1.Rows.Count)
{
DataGridViewRow selectedRow = dataGridView1.Rows[e.RowIndex];
var o = selectedRow.DataBoundItem;
if (o is PlcModel plc)
{
this.label1.Text = plc.Name;
}
}
}
}
public class PlcModel
{
public int Id { get; set; }
public string Name { get; set; }
public string PlcValue { get; set; }
public string Description { get; set; }
}
}
```
在这个修改后的代码中,我们将`dataGridView1_CellContentClick`事件替换为`dataGridView1_CellClick`事件,并在`InitializeDataGridView`方法中添加了对`CellClick`事件的订阅。这样,无论点击单元格的哪个部分,都会触发`dataGridView1_CellClick`事件,从而显示所在行的`plc.Name`。