У меня проблемы с приложением, которое я написал. По сути, это календарь на месяц, который состоит из панелей / списков на каждый день месяца. Я заполняю свои списки с помощью следующего:
private void PopulateEventListBoxes(int offsetNumber, int monthDays)
{
string locationSelected = this.LocationComboBox.Text.ToLower();
for (int i = 0; i <= (monthDays - 1); i++)
{
DateTime dateSelected = Convert.ToDateTime(m_ArrayDateLabel[offsetNumber + i].Text).Date;
var tempCalendar = new Data.DataSet.vwGet_CalendarDetailsDataTable();
switch (locationSelected)
{
case "all":
Data.Manager.CalendarDetailsTableAdapter.FillByDate(tempCalendar, dateSelected);
break;
default:
Data.Manager.CalendarDetailsTableAdapter.FillByDateCity(tempCalendar, dateSelected, locationSelected);
break;
}
foreach (Data.DataSet.vwGet_CalendarDetailsRow row in tempCalendar)
{
((ListBox)m_ArrayEventListBox[offsetNumber + i]).Items.Add(row.Name + " - " + row.StatusCode);
}
}
}
Я использую var tempCalendar = new Data.DataSet.vwGet_CalendarDetailsDataTable();
для DataTable, потому что мне нужно загрузить дневные события в каждое из списков. Эти данные поступают с сервера SQL из представления.
После загрузки календаря пользователи могут добавлять, редактировать и удалять элементы с помощью всплывающего диалогового окна с подробными сведениями о календаре на день. Когда диалог загружается для добавления / редактирования, я заполняю его следующим образом:
private void SearchForEventsByDate()
{
switch (m_LocationSelected)
{
case "all":
Data.Manager.CalendarDetailsTableAdapter.FillByDate(DataSetCalendar.vwGet_CalendarDetails, m_DateSelected);
CalendarDetailsBindingSource.DataSource = DataSetCalendar.vwGet_CalendarDetails;
break;
default:
Data.Manager.CalendarDetailsTableAdapter.FillByDateCity(DataSetCalendar.vwGet_CalendarDetails, m_DateSelected, m_LocationSelected);
CalendarDetailsBindingSource.DataSource = DataSetCalendar.vwGet_CalendarDetails;
break;
}
RefreshRepRecordCount();
}
На этот раз, когда загружаются данные, я использую вызов DataSetCalendar.vwGet_CalendarDetails
вместо версии временной памяти данных.
Моя проблема вступит в игру, если я выполню следующие действия:
- Добавить новое событие для сотрудника
- Удалить то самое событие, которое я только что добавил
- Попробуйте добавить новое событие для сотрудника в тот же день - приложение выдает ошибку, что GUID уже присутствует в таблице.
Первичный ключ моей таблицы - EventDate и EmployeeGuid. Если я запрашиваю таблицу SQL после удаления, запись не появляется, но мое приложение все еще думает, что запись все еще существует. Я знаю, что запись находится в памяти.
Я пытался удалить его из памяти, но он не работает:
DataSetCalendar.vwGet_CalendarDetails.FindByEmployeeGUID(SelectedCalendarEvent.EmployeeGUID).Delete();
DataSetCalendar.vwGet_CalendarDetails.AcceptChanges();
Я также пытался использовать Remove
, чтобы избавиться от записи, но мое приложение все еще думает, что запись существует. Я не знаю, что еще сделать или попробовать. Любая помощь будет отличной.