不能真正说出为什么它不起作用,但用这段代码做一个简单的测试:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = GenerateData();
dataGridView1.Columns[0].ReadOnly = true;
}
private List<DataSourceTest> GenerateData()
{
return new List<DataSourceTest>()
{
new DataSourceTest(1, "A"),
new DataSourceTest(2, "B"),
new DataSourceTest(3, "C"),
new DataSourceTest(4, "D"),
new DataSourceTest(5, "E"),
new DataSourceTest(6, "F"),
};
}
}
public class DataSourceTest
{
public DataSourceTest(int id, string name) { ID = id; Name = name; }
public int ID { get; set; }
public string Name { get; set; }
}
并将 gridview EditMode 设置为 EditOnEnter 以便我们可以轻松检查它是否为只读,表明它做得很好。
但如果您仍然有问题,最好的办法是使用事件,最接近您问题的事件是绑定完成后将触发的DataBindingComplete,依此类推时间,您将拥有对所有列的完全访问权限,因为它们已经绑定到 gridview 对象。
双击 GridView 控件中的事件并添加您的只读设置器:
private void dataGridView1_DataBindingComplete(
object sender, DataGridViewBindingCompleteEventArgs e)
{
dataGridView1.Columns[0].ReadOnly = true;
}