using System; using System.Data; using Kreta.Framework; using Kreta.Framework.Util; namespace Kreta.DataAccessManual.Util { public sealed class DictionaryItemCacheUtil { private const string DictionaryNamePostfix = "_DNAME"; private const string SeparatorString = ",;"; /// /// Létrehoz új oszlopokat processedTable-ben {ColumnName}_DNAME névvel(ha még ilyen nevű oszlopok nem léteznek). /// Kitölti a DictionaryCache-ből a columnNamesString értéke alapján {ColumnName}_DNAME értékét. /// Ha már létezik a {ColumnName}_DNAME oszlop, akkor felülírja az oszlop tartalmát. /// /// /// public static void TableColumnFromDictionaryCache(DataTable processedTable, string columnNamesString) { #region Argumentnull-ellenőrzés if (processedTable == null) { throw new ArgumentNullException(nameof(processedTable)); } if (columnNamesString == null) { throw new ArgumentNullException(nameof(columnNamesString)); } #endregion #region Oszlopnevek kinyerése columnNamesString argumentumból // oszlopnevek szeparálása var separator = SeparatorString.ToCharArray(); var columnNames = columnNamesString.Split(separator); var columnCount = columnNames.Length; #endregion #region Egzisztencia-ellenőrzés for (var i = 0; i < columnCount; i++) { var columnName = columnNames[i]; if (processedTable.Columns.Contains(columnName) == false) { throw new ArgumentOutOfRangeException(nameof(columnNamesString), columnNamesString, @"The columnNamesString parameter contains columnName that not exists in the specified table!"); } } #endregion #region Oszlopok hozzáadása for (var i = 0; i < columnCount; i++) { var newColumnName = columnNames[i] + DictionaryNamePostfix; if (processedTable.Columns[newColumnName] == null) { processedTable.Columns.Add(newColumnName); } } #endregion #region Szövegek beállítása a cache-selt szótárból (nyelvesen) // DNAME beállítás a cache-ből foreach (DataRow dataRow in processedTable.Rows) { for (var i = 0; i < columnCount; i++) { var rowHasValue = true; var newColumnName = columnNames[i] + DictionaryNamePostfix; if (dataRow[columnNames[i]] == DBNull.Value || string.IsNullOrWhiteSpace(dataRow[columnNames[i]].ToString())) { rowHasValue = false; } if (rowHasValue) { var strActCache = Convert.ToInt32(dataRow[columnNames[i]]).GetItemNameFromCache(UserContext.Instance.SelectedTanevId); dataRow[newColumnName] = strActCache; } else { dataRow[newColumnName] = string.Empty; } } } #endregion } } }