2011-07-20 5 views
0

私が書いたアプリケーションの問題が発生しています。基本的に月ごとのパネル/リストボックスから作成される月カレンダーです。私は、次を使用して、私のリストボックスを移入:私はリストボックスのそれぞれに毎日イベントをロードする必要があるので、私はDataTableのためvar tempCalendar = new Data.DataSet.vwGet_CalendarDetailsDataTable();を使用していますDataTableの削除または更新

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); 
     } 
    } 
} 

。このデータは、ビューから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の代わりに、データテーブルの一時メモリ版を使用しています。この時間。

私はこれらの手順に従うならば私の問題は遊びに来ている

  1. 私はちょうど
  2. 試してみてのために再度追加新しいイベントを追加したものと同じイベントを削除し、従業員
  3. のための新しいイベントを追加します。同じ日の従業員 - アプリケーションはGUIDがすでにテーブルに存在するというエラーをスローします。

テーブルの主キーはEventDateとEmployeeGuidです。私は削除後にSQLテーブルを照会すると、レコードはありませんが、私のアプリケーションはまだレコードが存在すると考えています。私はその記録が記憶にあることを知っています。

私はメモリから削除するには、以下を試してみましたが、それは動作していない:

DataSetCalendar.vwGet_CalendarDetails.FindByEmployeeGUID(SelectedCalendarEvent.EmployeeGUID).Delete(); 
DataSetCalendar.vwGet_CalendarDetails.AcceptChanges(); 

私はまた、レコードを取り除くためにRemoveを使用して試してみましたが、私のアプリはまだレコードが存在すると思います。私は他に何をやるべきかわからない。どんな助けも素晴らしいだろう。

答えて

0

私は間抜けな音にないClear()

private void SearchForEventsByDate() 
{ 
    switch (m_LocationSelected) 
    { 
     case "all": 
     Data.Manager.Data.SM_T_Employee_Status.Clear(); 
     DataSetCalendar.vwGet_CalendarDetails.Clear(); 

     Data.Manager.CalendarDetailsTableAdapter.FillByDate(DataSetCalendar.vwGet_CalendarDetails, m_DateSelected); 
      CalendarDetailsBindingSource.DataSource = DataSetCalendar.vwGet_CalendarDetails; 
      break; 
     default: 
      Data.Manager.Data.SM_T_Employee_Status.Clear(); 
      DataSetCalendar.vwGet_CalendarDetails.Clear(); 
      Data.Manager.CalendarDetailsTableAdapter.FillByDateCity(DataSetCalendar.vwGet_CalendarDetails, m_DateSelected, m_LocationSelected); 
      CalendarDetailsBindingSource.DataSource = DataSetCalendar.vwGet_CalendarDetails; 
      break; 
    } 

RefreshRepRecordCount(); 
} 
0

あなたはどのようにクライアント側にカレンダーを "保存"していますか?それが分かっていると答えにつながるでしょう。あなたはクライアント側にあるタイプのキャッシュを持っているようです。

クライアント側でキャッシュする場合は、サーバー側のデータを変更するときにキャッシュをリフレッシュする必要があります。

+0

を追加することによってこの問題を解決することができましたが、私は100%を確認していません。私は、私の部署の誰かによって作成されたwinformsテンプレート/フレームワークを使用しています。私はまだ全体がどのように機能するかについてかなり新しいです。しかし、私は記憶の中でそれをリフレッシュしなければならないことを知っていますが、私はそれを成功させることができませんでした。 – Taryn

+0

質問をするのは、愚かな人は質問しないので、愚かではないことを示すものです。不幸なことに、少なくとも多くの実装では、自国のフレームワークについての抽象概念は考えられていません。キャッシュメソッドがカプセル化されている場合は、フレームワークを掘り下げてキャッシュを無効にする方法を決定する必要があります。 –

関連する問題