исключение говорит о том, что вы пытаетесь получить значение столбца, который не был инициализирован в контексте. Чтобы получить его, вам необходимо загрузить его в контекст клиента вместе с коллекцией элементов списка. Самый простой способ получить все поля - использовать FieldValuesAsText. Для вашего примера кода обновленный код будет выглядеть как
.....
overviewlistClientcontext.Load(listItems, includes => includes.Include(i => i.FieldValuesAsText));
overviewlistClientcontext.ExecuteQuery();
position = listItems.ListItemCollectionPosition;
DataTable dataTable = new DataTable();
DataRow dr;
DataColumn dc = new DataColumn("Site Owner");
dc.DataType = Type.GetType("System.String");
dataTable.Columns.Add(dc);
foreach (var listItem in listItems)
{
dr = dataTable.NewRow();
dr["Site Owner"] = listItem.FieldValuesAsText["Site Owner"];
dataTable.Rows.Add(dr);
}
.....
Также имейте в виду, что вы должны использовать внутреннее имя (не отображаемое имя) столбца, чтобы получить значение поля. Поэтому я подозреваю, что внутреннее имя столбца «Владелец сайта» для вас будет «Site_x0020_Owner», поэтому вы должны принять его следующим образом:
dr["Site Owner"] = listItem.FieldValuesAsText["Site_x0020_Owner"];
Чтобы проверить, каково внутреннее имя вашего столбца, самое простое Вы можете ввести страницу редактирования Вашего столбца, и внутреннее имя будет частью URL как один из параметров GET