2011-06-12 62 views
1

我正在使用此代碼來更新我的網格。它不工作。網格沒有更新。我找不到任何代碼問題。這是一個幫助臺應用程序。我正嘗試使用客戶端上的網格更新服務器上的已關閉故障單。幫幫我 !我正在添加和從ObservableCollection中刪除,但網格不更新

public class DAL_LOADTICKETS 
{ 
    private static string URL ="http://helpdesk.hujelabs.com/user.php/"+Login.user_id+"/query/"; 
    public static void/*ObservableCollection<cTicket>*/ LoadOPENTICKETS() 
    { 
     // Execute the query using the LINQ to XML 

     var tickets = from c in XElement.Load(URL).Elements("query") select c; 
     foreach (var ticks in tickets) 
     { 
      cTicket lTicket = new cTicket 
      { 
       TicketID = ticks.Element("query_id").Value, 
       TicketStatus = ticks.Element("status").Value, 
       TicketSubject = ticks.Element("subject").Value, 
       TicketDescription = ticks.Element("description").Value, 
       TicketTags = ticks.Element("tag").Value, 
       TimeStamp = ticks.Element("timestamp").Value, 
      }; 
      if (ticks.Element("status").Value == "open") 
      { 
       if (!Window1.OpenTicketsList.Contains(lTicket)) 
       { 
        Window1.OpenTicketsList.Add(lTicket); 
       } 
      } 

      else if (ticks.Element("status").Value == "closed") 
      { 
       if (Window1.OpenTicketsList.Contains(lTicket)) 
       { 
        Console.WriteLine("VISITED BUT NOT DELETED"); 

        Window1.OpenTicketsList.Remove(lTicket); 
       } 
      } 

     } 

    } 
<Grid Width="756" Background="White"> 
        <ListView Name="OpenReqList" HorizontalAlignment="Stretch" VerticalAlignment="Top" ItemsSource="{Binding TicketCollection}" Width="750" PreviewMouseDoubleClick="OpenReqList_PreviewMouseDoubleClick" IsSynchronizedWithCurrentItem="True"> 
     <ListView.View> 
      <GridView > 
       <GridView.Columns> 
        <GridViewColumn Width="100" Header="Ticket ID" DisplayMemberBinding="{Binding TicketID}"/> 
        <GridViewColumn Width="250" Header="Ticket Subject" DisplayMemberBinding="{Binding Path=TicketSubject}"/> 
        <GridViewColumn Width="190" Header="Ticket Send Time" DisplayMemberBinding="{Binding Path=TimeStamp}"/> 
        <GridViewColumn Width="190" Header="Ticket Status" DisplayMemberBinding="{Binding Path=TicketStatus}"/> 
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 
public class cTicket 
    { 
     public string TicketID { get; set; } 
     public string TicketStatus { get; set; } 
     public string TicketSubject { get; set; } 
     public string TicketDescription { get; set; } 
     public string TicketTags { get; set; } 
     public string TicketDiscussionID { get; set; } 
     public string ResponseAdmin { get; set; } 
     public string ResponseClient { get; set; } 
     public string TimeStamp { get; set; } 
    } 
+0

你還可以顯示如何設置網格的數據綁定到Window1.OpenTicketsList? – 2011-06-12 17:09:24

+0

你可以發佈你的ViewModel的xaml和相關部分嗎? – 2011-06-12 17:09:40

+0

我已更新xaml的相同代碼塊 – 2011-06-12 17:13:30

回答

1

它看起來像你的代碼構造一個新的票,並試圖從的ObservableCollection刪除。嘗試找到已存在於您收藏中的Ticket,然後將其刪除。或者,您可能需要覆蓋票證類中的Equals,以便ObservableCollection知道您的新票證等於舊票證。

+0

我寫了另一種方法,檢查當前收集與網絡上的集合。匹配他們的query_id並檢查狀態。但是在更新中它給出了這個例外: 收集已被修改;枚舉操作可能不會執行。 – 2011-06-12 17:37:11

+0

對大多數集合使用foreach語句時,枚舉器將檢查以確保集合尚未修改(添加/刪除/替換/清除)。如果集合在枚舉器創建後發生了變化,枚舉器將拋出此異常。要解決這個問題,一旦你修改了集合,就把'break'從循環中取出。或者,您可以使用一個循環來查找需要刪除的對象/索引,在foreach(){}之後,您可以修改該集合。 – 2011-06-12 17:55:25

+0

我似乎已經完成了上述方法。選擇索引並在foreach之外移除。不知道它是完全無BUG的...... – 2011-06-12 18:17:22

相關問題