/// <summary> /// Populate the DataView with the DB2 Data. /// </summary> private void PopulateDataView(IDBCDStorage storage, ref DataTable data) { foreach (var rowData in storage.Values) { var row = data.NewRow(); foreach (string columnName in rowData.GetDynamicMemberNames()) { var columnValue = rowData[columnName]; if (columnValue.GetType().IsArray) { Array columnValueArray = (Array)columnValue; for (var i = 0; i < columnValueArray.Length; ++i) { row[columnName + i] = columnValueArray.GetValue(i); } } else { row[columnName] = columnValue; } } data.Rows.Add(row); } }
/// <summary> /// Populate the DataView with the DB2 Columns. /// </summary> private void PopulateColumns(IDBCDStorage storage, ref DataTable data) { if (storage.Values.Count == 0) { data.Columns.Add("No data"); return; } var firstItem = storage.Values.First(); foreach (string columnName in firstItem.GetDynamicMemberNames()) { var columnValue = firstItem[columnName]; if (columnValue.GetType().IsArray) { Array columnValueArray = (Array)columnValue; for (var i = 0; i < columnValueArray.Length; ++i) { data.Columns.Add(columnName + i); } } else { data.Columns.Add(columnName); } } }
private async Task <byte[]> GenerateCSVStream(IDBCDStorage storage, Parameters parameters, bool newLinesInStrings = true) { if (storage.AvailableColumns.Length == 0) { throw new Exception("No columns found!"); } // NOTE: if newLinesInStrings is obsolete then use StringToCSVCell in ctor Func <string, string> formatter = newLinesInStrings switch { true => StringToCSVCell, _ => StringToCSVCellSingleLine }; var viewFilter = new DBCViewFilter(storage, parameters, formatter); using var exportStream = new MemoryStream(); using var exportWriter = new StreamWriter(exportStream); // write header await exportWriter.WriteLineAsync(string.Join(",", GetColumnNames(storage))); // write records foreach (var item in viewFilter.GetRecords()) { await exportWriter.WriteLineAsync(string.Join(",", item)); } exportWriter.Flush(); return(exportStream.ToArray()); }
private IEnumerable <string> GetColumnNames(IDBCDStorage storage) { var record = storage.Values.FirstOrDefault(); if (record == null) { yield break; } for (var i = 0; i < storage.AvailableColumns.Length; ++i) { var name = storage.AvailableColumns[i]; if (record[name] is Array array) { // explode arrays by suffixing the ordinal for (var j = 0; j < array.Length; j++) { yield return(name + $"[{j}]"); } } else { yield return(name); } } }
private void OpenDBItems_SelectionChanged(object sender, SelectionChangedEventArgs e) { // Clear DataGrid DB2DataGrid.Columns.Clear(); DB2DataGrid.ItemsSource = new List <string>(); currentOpenDB2 = (string)OpenDBItems.SelectedItem; if (currentOpenDB2 == null) { return; } if (dbLoader.LoadedDBFiles.TryGetValue(currentOpenDB2, out IDBCDStorage storage)) { var stopWatch = new Stopwatch(); stopWatch.Start(); var data = new DataTable(); PopulateColumns(storage, ref data); if (storage.Values.Count > 0) { PopulateDataView(storage, ref data); } stopWatch.Stop(); Console.WriteLine($"Populating Grid: {currentOpenDB2} Elapsed Time: {stopWatch.Elapsed}"); openedDB2Storage = storage; DB2DataGrid.ItemsSource = data.DefaultView; } Title = $"WDBXEditor2 - {Constants.Version} - {currentOpenDB2}"; }
public DBCViewFilter(IDBCDStorage storage, IReadOnlyDictionary <string, string> parameters, Func <string, string> stringFormatter = null) { Storage = storage; Parameters = parameters; StringFormatter = stringFormatter; InitialiseSort(); InitialiseSearch(); Initialise(); }
/// <summary> /// Close the currently opened DB2 file. /// </summary> private void Close_Click(object sender, RoutedEventArgs e) { Title = $"WDBXEditor2 - {Constants.Version}"; // Remove the DB2 file from the open files. OpenDBItems.Items.Remove(currentOpenDB2); // Clear DataGrid DB2DataGrid.Columns.Clear(); currentOpenDB2 = string.Empty; openedDB2Storage = null; }
private void OpenDBItems_SelectionChanged(object sender, SelectionChangedEventArgs e) { // Clear DataGrid DB2DataGrid.Columns.Clear(); DB2DataGrid.ItemsSource = new List <string>(); DB2InfoDataGrid.Columns.Clear(); DB2InfoDataGrid.ItemsSource = new List <string>(); currentOpenDB2 = (string)OpenDBItems.SelectedItem; if (currentOpenDB2 == null) { return; } if (dbLoader.LoadedDBFiles.TryGetValue(currentOpenDB2, out IDBCDStorage storage)) { var stopWatch = new Stopwatch(); stopWatch.Start(); var data = new DataTable(); PopulateColumns(storage, ref data); if (storage.Values.Count > 0) { PopulateDataView(storage, ref data); } stopWatch.Stop(); Console.WriteLine($"Populating Grid: {currentOpenDB2} Elapsed Time: {stopWatch.Elapsed}"); openedDB2Storage = storage; DB2DataGrid.ItemsSource = data.DefaultView; //info data var datainfo = new DataTable(); DBFileReaderLib.DBParser dp = storage.parser; datainfo.Columns.Add("Field"); datainfo.Columns.Add("Data"); datainfo.Columns.Add("Comments"); string strComment = "db2 header"; datainfo.Rows.Add("RecordsCount", dp.RecordsCount, strComment); datainfo.Rows.Add("FieldsCount", dp.FieldsCount, strComment); datainfo.Rows.Add("RecordSize", dp.RecordSize, strComment); datainfo.Rows.Add("StringTableSize", dp.StringTableSize, strComment); datainfo.Rows.Add("TableHash", dp.TableHash, strComment); datainfo.Rows.Add("LayoutHash", dp.LayoutHash, strComment); datainfo.Rows.Add("min_id", dp.min_id, strComment); datainfo.Rows.Add("max_id", dp.max_id, strComment); datainfo.Rows.Add("local", dp.local, strComment); datainfo.Rows.Add("Flags", (int)dp.Flags, strComment); datainfo.Rows.Add("IdFieldIndex", dp.IdFieldIndex, strComment); datainfo.Rows.Add("total_field_count", dp.FieldsCount, strComment); datainfo.Rows.Add("bitpacked_data_offset", dp.bitpacked_data_offset, strComment); datainfo.Rows.Add("lookupColumnCount", dp.lookupColumnCount, strComment); datainfo.Rows.Add("field_info_size", dp.field_info_size, strComment); datainfo.Rows.Add("commonDataSize", dp.commonDataSize, strComment); datainfo.Rows.Add("palletDataSize", dp.palletDataSize, strComment); datainfo.Rows.Add("SectionsCount", dp.SectionsCount, strComment); //section info for (int i = 0; i < dp.SectionHeaders.Count; i++) { strComment = String.Format("Section{0} header", i); datainfo.Rows.Add("tact_key_hash", dp.SectionHeaders[i].TactKeyLookup, strComment); datainfo.Rows.Add("FileOffset", dp.SectionHeaders[i].FileOffset, strComment); datainfo.Rows.Add("NumRecords", dp.SectionHeaders[i].NumRecords, strComment); datainfo.Rows.Add("StringTableSize", dp.SectionHeaders[i].StringTableSize, strComment); datainfo.Rows.Add("OffsetRecordsEndOffset", dp.SectionHeaders[i].OffsetRecordsEndOffset, strComment); datainfo.Rows.Add("IndexDataSize", dp.SectionHeaders[i].IndexDataSize, strComment); datainfo.Rows.Add("ParentLookupDataSize", dp.SectionHeaders[i].ParentLookupDataSize, strComment); datainfo.Rows.Add("OffsetMapIDCount", dp.SectionHeaders[i].OffsetMapIDCount, strComment); datainfo.Rows.Add("CopyTableCount", dp.SectionHeaders[i].CopyTableCount, strComment); } DB2InfoDataGrid.ItemsSource = datainfo.DefaultView; } Title = $"WDBXEditor2 - {Constants.Version} - {currentOpenDB2}"; }