//************************ //* * //* ShowTableContainer * //* * //************************ // Get and show entities in selected table container. Call from UI thread. public void ShowTableContainer(String tableName) { try { this.Cursor = Cursors.Wait; ContainerDetails.Text = "Loading entity list..."; TableListView.ItemsSource = null; // Create a temporary copy of the TableColumnNames table and add columns as we encounter them. // This is done to prume away previously saved colum names that are no longer present in the data. var tempTableColumnNames = new Dictionary<string, bool>(); TableListViewGridView.Columns.Clear(); AddTableListViewColumn("PartitionKey"); AddTableListViewColumn("RowKey", false); AddTableListViewColumn("Timestamp"); tempTableColumnNames.Add("PartitionKey", TableColumnNames["PartitionKey"]); tempTableColumnNames.Add("RowKey", TableColumnNames["RowKey"]); tempTableColumnNames.Add("Timestamp", TableColumnNames["Timestamp"]); int containerCount = 0; _EntityCollection.Clear(); TableListView.Visibility = Visibility.Visible; EntityToolbarPanel.Visibility = Visibility.Visible; CloudTable table = tableClient.GetTableReference(tableName); // Query the table and retrieve a collection of entities. var query = new TableQuery<ElasticTableEntity>(); // Limit the number of entities returned from the query, defaulting to 500 if not specified. var take = MaxEntityCountFilter > 0 ? MaxEntityCountFilter : 500; query.TakeCount = take; IEnumerable<ElasticTableEntity> entities; if (EntityQueryEnabled) { EntityQuery.IsChecked = true; string filterCondition = null; var operation = GetTableQueryOperation(EntityQueryCondition[0]); if (!string.IsNullOrEmpty(operation)) { filterCondition = GetQueryFilterCondition(EntityQueryColumnName[0], operation, EntityQueryValue[0]); } if (EntityQueryColumnName.Length > 1) { operation = GetTableQueryOperation(EntityQueryCondition[1]); if (!string.IsNullOrEmpty(operation)) { filterCondition = TableQuery.CombineFilters( filterCondition, TableOperators.And, GetQueryFilterCondition(EntityQueryColumnName[1], operation, EntityQueryValue[1])); } } if (EntityQueryColumnName.Length > 2) { operation = GetTableQueryOperation(EntityQueryCondition[2]); if (!string.IsNullOrEmpty(operation)) { filterCondition = TableQuery.CombineFilters( filterCondition, TableOperators.And, GetQueryFilterCondition(EntityQueryColumnName[2], operation, EntityQueryValue[2])); } } entities = table.ExecuteQuery(query.Where(filterCondition)).ToList(); } else { EntityQuery.IsChecked = false; entities = table.ExecuteQuery(query).ToList(); } if (entities != null) { // Iterate through the list of entities. // Ensure a bound column exists in the list view for each. // Add a representation of each entity to the items source for the list view. bool match = false; foreach (ElasticTableEntity entity in entities) { match = false; if (EntityTextFilter == null) match = true; if (MaxEntityCountFilter != -1 && containerCount >= MaxEntityCountFilter) break; foreach (KeyValuePair<String, EntityProperty> prop in entity.Properties) { AddTableListViewColumn(prop.Key); if (!tempTableColumnNames.ContainsKey(prop.Key)) { tempTableColumnNames.Add(prop.Key, TableColumnNames[prop.Key]); } } EntityItem item = new EntityItem(entity); if (EntityTextFilter != null) { if (entity.RowKey.IndexOf(EntityTextFilter, 0, StringComparison.OrdinalIgnoreCase) != -1 || entity.PartitionKey.IndexOf(EntityTextFilter, 0, StringComparison.OrdinalIgnoreCase) != -1) { match = true; } else { foreach(KeyValuePair<String, String> field in item.Fields) { if (field.Value.IndexOf(EntityTextFilter, 0, StringComparison.OrdinalIgnoreCase) != -1) { match = true; } } } } if (match) { _EntityCollection.Add(item); containerCount++; } TableColumnNames = tempTableColumnNames; } } if (_EntityCollection != null) { foreach (EntityItem entity in _EntityCollection) { entity.AddMissingFields(TableColumnNames); } } //SortEntityList(); if (containerCount == 1) { ContainerDetails.Text = "(1 entity) as of " + DateTime.Now.ToString(); } else { ContainerDetails.Text = "(" + containerCount.ToString() + " entities) as of " + DateTime.Now.ToString(); } TableListView.ItemsSource = EntityCollection; this.Cursor = Cursors.Arrow; } catch(Exception ex) { this.Cursor = Cursors.Arrow; ShowError("Error querying table: " + ex.Message); } }
//************************ //* * //* ShowTableContainer * //* * //************************ // Get and show entities in selected table container. Call from UI thread. private async Task ShowTableContainerAsync(String tableName, bool loadData = true) { try { this.Cursor = Cursors.Wait; ContainerDetails.Text = "Loading entity list..."; TableListView.ItemsSource = null; // Create a temporary copy of the TableColumnNames table and add columns as we encounter them. // This is done to prume away previously saved colum names that are no longer present in the data. Dictionary<String, bool> tempTableColumnNames = new Dictionary<string, bool>(); TableListViewGridView.Columns.Clear(); AddTableListViewColumn("PartitionKey"); AddTableListViewColumn("RowKey"); AddTableListViewColumn("Timestamp", false); tempTableColumnNames.Add("PartitionKey", TableColumnNames["PartitionKey"]); tempTableColumnNames.Add("RowKey", TableColumnNames["RowKey"]); tempTableColumnNames.Add("Timestamp", TableColumnNames["Timestamp"]); int containerCount = 0; _EntityCollection.Clear(); TableListView.Visibility = Visibility.Visible; EntityToolbarPanel.Visibility = Visibility.Visible; if (!loadData) { ContainerDetails.Text = "Click Refresh to load the data"; return; } CloudTable table = tableClient.GetTableReference(tableName); // Query the table and retrieve a collection of entities. var query = new TableQuery<ElasticTableEntity>(); IEnumerable<ElasticTableEntity> entities = null; if (EntityQueryEnabled) { EntityQuery.IsChecked = true; for (int i = 0; i < this.EntityQueryColumnName.Length; i++) { this.AppendQueryFilter( query, this.EntityQueryColumnName[i], this.EntityQueryCondition[i], this.EntityQueryValue[i]); } entities = table.ExecuteQuery(query).ToList(); } else { EntityQuery.IsChecked = false; entities = table.ExecuteQuery(query).ToList(); } if (entities != null) { // Iterate through the list of entities. // Ensure a bound column exists in the list view for each. // Add a representation of each entity to the items source for the list view. bool match = false; foreach (ElasticTableEntity entity in entities) { match = false; if (EntityTextFilter == null) match = true; if (MaxEntityCountFilter != -1 && containerCount >= MaxEntityCountFilter) break; foreach (KeyValuePair<String, EntityProperty> prop in entity.Properties) { AddTableListViewColumn(prop.Key); if (!tempTableColumnNames.ContainsKey(prop.Key)) { tempTableColumnNames.Add(prop.Key, TableColumnNames[prop.Key]); } } EntityItem item = new EntityItem(entity); if (EntityTextFilter != null) { if (entity.RowKey.IndexOf(EntityTextFilter, 0, StringComparison.OrdinalIgnoreCase) != -1 || entity.PartitionKey.IndexOf(EntityTextFilter, 0, StringComparison.OrdinalIgnoreCase) != -1) { match = true; } else { foreach (KeyValuePair<String, String> field in item.Fields) { if (field.Value.IndexOf(EntityTextFilter, 0, StringComparison.OrdinalIgnoreCase) != -1) { match = true; } } } } if (match) { _EntityCollection.Add(item); containerCount++; } TableColumnNames = tempTableColumnNames; } } if (_EntityCollection != null) { foreach (EntityItem entity in _EntityCollection) { entity.AddMissingFields(TableColumnNames); } } //SortEntityList(); if (containerCount == 1) { ContainerDetails.Text = "(1 entity) as of " + DateTime.Now.ToString(); } else { ContainerDetails.Text = "(" + containerCount.ToString() + " entities) as of " + DateTime.Now.ToString(); } TableListView.ItemsSource = EntityCollection; } catch (Exception ex) { ShowError("Error querying table: " + ex.Message); } finally { this.Cursor = Cursors.Arrow; } }