Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Свойство на сетке, Вы связываете с Кодом операции также?.. если Вы хотите связать непосредственно для Списка Вас, был бы просто DataSource = список. Привязки данных позволяют пользовательскую привязку. Вы пытаетесь сделать что-то другое, чем источник данных?
Вы получаете набор пустых строк? автоматические сгенерированные столбцы имеют имена? Вы проверили, что данные находятся в объекте (не просто string.empty)?
class MyObject
{
public string Something { get; set; }
public string Text { get; set; }
public string Other { get; set; }
}
public Form1()
{
InitializeComponent();
List<MyObject> myList = new List<MyObject>();
for (int i = 0; i < 200; i++)
{
string num = i.ToString();
myList.Add(new MyObject { Something = "Something " + num , Text = "Some Row " + num , Other = "Other " + num });
}
dataGridView1.DataSource = myList;
}
это должно хорошо работать...
Я не могу действительно сказать то, что Вы пытаетесь сделать с примером, который Вы включали, но связывающий с универсальным списком объектов довольно просто, если Вы просто хотите перечислить объекты:
private BindingSource _gridSource;
private BindingSource GridSource
{
get
{
if (_gridSource == null)
_gridSource = new BindingSource();
return _gridSource;
}
}
private void Form1_Load(object sender, EventArgs e)
{
List<FluffyBunny> list = new List<FluffyBunny>();
list.Add(new FluffyBunny { Color = "White", EarType = "Long", Name = "Stan" });
list.Add(new FluffyBunny { Color = "Brown", EarType = "Medium", Name = "Mike" });
list.Add(new FluffyBunny { Color = "Mottled", EarType = "Short", Name = "Torvald" });
GridSource.DataSource = list;
dataGridView1.Columns["EarType"].Visible = false; //Optionally hide a column
dataGridView1.DataSource = GridSource;
}
, Если Вы только хотите отобразить определенные свойства типа Списка, необходимо быть в состоянии сделать нежелательный столбец (столбцы) невидимым.
Технически, Вы не должны действительно создавать BindingSource, но я нахожу, что намного легче, когда я делаю обновления или изменения, если у меня есть он.
Hope это помогает.
Имел ту же проблему... У меня была структура с общедоступными полями, очевидно. ничто в сетке. если общедоступные методы считывания, работавшие.
Еще одно решение, которое я нашел, - использовать коллекцию BindingList.
private void Form1_Load(object sender, EventArgs e)
{
BindingList people= new BindingList {
new Person {Name="John",Age=23},
new Person {Name="Lucy",Age=16}
};
dataGridView1.DataSource= people;
}
У меня она отлично работает,