private void gridEvents_Loaded(object sender, RoutedEventArgs e)
 {
     // Hide the select all button to avoid users from select the entire grid, 
     var dataGrid = (DataGrid)sender;
     HideSelectAllButton(dataGrid);
     this.GridColumns = new Dictionary<string, DataGridColumn>();
     foreach (var column in dataGrid.Columns)
     {
         this.GridColumns.Add(DataGridUtil.GetName(column), column);
     }
     this.detailsWindow = new EventDetails();
     this.detailsWindow.Closing += (s, args) =>
     {
         this.detailsWindow.Hide();
         args.Cancel = true;
     };
 }
 void gridEvents_MouseDoubleClick(object sender, MouseButtonEventArgs e)
 {
     object source = e.OriginalSource;
     DependencyObject dep = DataGridUtil.GetDataGridRow(source);
     DataGridRow row = dep as DataGridRow;
     if (row != null)
     {                
         EventRecordProxy item = row.Item as EventRecordProxy;
         if (item != null)
         {
             this.detailsWindow.Title = "EVENT DETAILS ROW " + row.Header;
             this.detailsWindow.DataContext = item.Details.ToString();
             if (!this.detailsWindow.IsVisible || !this.detailsWindow.IsActive)
             {
                 this.detailsWindow.Show();
                 this.detailsWindow.Activate();
             }
         }
     }
 }
        private void gridEvents_PreviewKeyDown(object sender, KeyEventArgs e)
        {

            bool exclude = false;
            bool addFilter = false;

            if ((Keyboard.Modifiers & ModifierKeys.Control) > 0 &&
                (Keyboard.Modifiers & ModifierKeys.Shift) > 0 &&
                (Keyboard.IsKeyDown(Key.C) || Keyboard.IsKeyDown(Key.E)))
            {
                addFilter = true;
                exclude = Keyboard.IsKeyDown(Key.E);
            }

            if (addFilter)
            {
                DataGrid grid = sender as DataGrid;
                if (grid == null)
                {
                    return;
                }

                DependencyObject dep = e.OriginalSource as DependencyObject;
                DataGridCell cell;
                DataGridRow row;
                EventRecordProxy proxy;
                dep = GetCellRow(dep, out cell, out row);

                if (cell != null && row != null)
                {
                    TextBlock txtBlock = cell.Content as TextBlock;
                    if (txtBlock == null)
                    {
                        return;
                    }

                    proxy = row.Item as EventRecordProxy;
                    if (proxy == null)
                    {
                        return;
                    }
                    string op = exclude ? "!=" : "=";
                    string filter = null;
                    string value = txtBlock.Text;
                    string columnName = DataGridUtil.GetName(cell.Column);
                    switch (columnName)
                    {
                        case "Id":
                        case "Level":
                        case "Pid":
                        case "Tid":
                            filter = string.Format("{0}{1}{2}", columnName, op, value);
                            break;
                        case "ActivityId":
                        case "RelatedActivityId":
                            if (exclude)
                            {
                                filter = string.Format("(ActivityId!={0} and RelatedActivityId!={0})", value);
                            }
                            else
                            {
                                filter = string.Format("(ActivityId={0} OR RelatedActivityId={0})", value);
                            }
                            break;
                        case "Symbol":
                            filter = "Id=" + proxy.Id;
                            break;
                        case "TimeStamp":
                            filter = "TimeStamp=DateTime.Parse(\"" + proxy.TimeStamp.ToString() + "\")";
                            break;
                        case "Message":
                            filter = string.Format("Message.Contains(\"{0}\")", value);
                            if (exclude)
                            {
                                filter = string.Format("!({0})", filter);
                            }
                            break;
                    }



                    if (this.OnCellCopy != null && filter != null)
                    {
                        this.OnCellCopy(filter, proxy);
                    }
                }
            }
        }