Не могу сказать, почему это не работает, но простой тест с этим кодом:
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;
}
Пробовали ли вы с помощью 'DataBindingComplete' событие? Я почти уверен, что когда это событие уволено, у вас уже есть доступ ко всем автогенерированным столбцам ... попробуйте. Просто откройте панель EVENTS и дважды щелкните по событию, затем отлаживайте и проверяйте столбцы. – balexandre
@balexandre Да, это тоже работает! Сделайте это ответом, и я приму это. – TEK