internal object this[ValueTableColumn column] { set { PutToCache(column.Name, value); PutToCache(column.Index.ToString(), value); } }
/// <summary> /// ВыгрузитьКолонку (UnloadColumn) /// </summary> /// <param name="column"></param> /// <returns></returns> public ArrayV8 UnloadColumn(ValueTableColumn column) { var ptr = InvokeV8Method("UnloadColumn", column.Ptr); if (ptr == null) { return(null); } return(new ArrayV8(Session, ptr, column.ValueType)); }
/// <summary> /// ВыгрузитьКолонку (UnloadColumn) /// </summary> /// <param name="column"></param> /// <returns></returns> public ArrayV8 UnloadColumn(ValueTableColumn column) { var ptr = InvokeV8Method("UnloadColumn", column.Ptr); if (ptr == null) { return null; } return new ArrayV8(Session, ptr, column.ValueType); }
/// <summary> /// Load cache /// </summary> /// <returns>Return cached columns</returns> public ValueTableColumn[] LoadCache() { Dictionary <ValueTableColumn, ArrayV8> columnValuesByIndex = new Dictionary <ValueTableColumn, ArrayV8>(); for (int i = 0; i < Columns.Count; i++) { var col = Columns[i]; try { var valueTypes = col.ValueType.Types; if (valueTypes.Length != 1 || valueTypes[0].Type == TypeEnum.Unknown) { continue; } } catch { continue; } ArrayV8 columnValuesArr = UnloadColumn(col); columnValuesArr.LoadCache(); columnValuesByIndex[col] = columnValuesArr; } if (columnValuesByIndex.Count == 0) { return(new ValueTableColumn[0]); } int rowsCount = this.Count; for (int i = 0; i < rowsCount; i++) { ValueTableRow row = (ValueTableRow)GetIndexerFromCache( i.ToString(), () => new ValueTableRow(this, i) ); foreach (KeyValuePair <ValueTableColumn, ArrayV8> pair in columnValuesByIndex) { row[pair.Key] = pair.Value[i]; } } ValueTableColumn[] cachedColumns = new ValueTableColumn[columnValuesByIndex.Count]; columnValuesByIndex.Keys.CopyTo(cachedColumns, 0); Array.Sort(cachedColumns, (a, b) => System.Collections.Comparer.DefaultInvariant.Compare(a.Index, b.Index)); return(cachedColumns); }
/// <summary> /// Получить колонку /// </summary> /// <param name="columnName"></param> /// <returns></returns> public ValueTableColumn this[string columnName] { get { return((ValueTableColumn)GetIndexerFromCache(columnName, delegate() { object ptr = InvokeV8Method("Find", columnName); if (ptr != null) { var column = new ValueTableColumn(this, ptr); PutToCache(column.Index.ToString(), column); return column; } return null; } )); } }
/// <summary> /// Получить колонку /// </summary> /// <param name="index"></param> /// <returns></returns> public ValueTableColumn this[int index] { get { return((ValueTableColumn)GetFromCache(index.ToString(), delegate() { object ptr = InvokeV8Method("Get", index); if (ptr != null) { var column = new ValueTableColumn(this, ptr); PutToIndexerCache(column.Name, column); return column; } return null; } )); } }
/// <summary> /// Получить колонку /// </summary> /// <param name="columnName"></param> /// <returns></returns> public ValueTableColumn this[string columnName] { get { return (ValueTableColumn)GetIndexerFromCache(columnName, delegate() { object ptr = InvokeV8Method("Find", columnName); if (ptr != null) { var column = new ValueTableColumn(this, ptr); PutToCache(column.Index.ToString(), column); return column; } return null; } ); } }
/// <summary> /// Получить колонку /// </summary> /// <param name="index"></param> /// <returns></returns> public ValueTableColumn this[int index] { get { return (ValueTableColumn)GetFromCache(index.ToString(), delegate() { object ptr = InvokeV8Method("Get", index); if (ptr != null) { var column = new ValueTableColumn(this, ptr); PutToIndexerCache(column.Name, column); return column; } return null; } ); } }
/// <summary> /// Индекс (IndexOf) /// </summary> /// <returns></returns> public int IndexOf(ValueTableColumn column) { return((int)InvokeV8Method("IndexOf", column.Ptr)); }
/// <summary> /// Индекс (IndexOf) /// </summary> /// <returns></returns> public int IndexOf(ValueTableColumn column) { return (int)InvokeV8Method("IndexOf", column.Ptr); }
/// <summary> /// Convert to DataTable /// </summary> /// <param name="fillRows"></param> /// <param name="columns"></param> /// <returns></returns> public DataTable ToDataTable(bool fillRows, ValueTableColumn[] columns) { DataTable dataTable = new DataTable(); for (int i = 0; i < columns.Length; i++) { var column = columns[i]; var tableColumn = column.ToDataColumn(); dataTable.Columns.Add(tableColumn); } if (fillRows) { int rowsCount = this.Count; for (int i = 0; i < rowsCount; i++) { var v8Row = this[i]; DataRow dataRow = dataTable.NewRow(); for (int c = 0; c < columns.Length; c++ ) { var column = columns[c]; dataRow[c] = v8Row[column.Index]; } dataTable.Rows.Add(dataRow); } } return dataTable; }
/// <summary> /// Load cache /// </summary> /// <returns>Return cached columns</returns> public ValueTableColumn[] LoadCache() { Dictionary<ValueTableColumn, ArrayV8> columnValuesByIndex = new Dictionary<ValueTableColumn, ArrayV8>(); for (int i = 0; i < Columns.Count; i++) { var col = Columns[i]; try { var valueTypes = col.ValueType.Types; if (valueTypes.Length != 1 || valueTypes[0].Type == TypeEnum.Unknown) { continue; } } catch { continue; } ArrayV8 columnValuesArr = UnloadColumn(col); columnValuesArr.LoadCache(); columnValuesByIndex[col] = columnValuesArr; } if (columnValuesByIndex.Count == 0) { return new ValueTableColumn[0]; } int rowsCount = this.Count; for (int i = 0; i < rowsCount; i++) { ValueTableRow row = (ValueTableRow)GetIndexerFromCache( i.ToString(), () => new ValueTableRow(this, i) ); foreach (KeyValuePair<ValueTableColumn, ArrayV8> pair in columnValuesByIndex) { row[pair.Key] = pair.Value[i]; } } ValueTableColumn[] cachedColumns = new ValueTableColumn[columnValuesByIndex.Count]; columnValuesByIndex.Keys.CopyTo(cachedColumns, 0); Array.Sort(cachedColumns, (a, b) => System.Collections.Comparer.DefaultInvariant.Compare(a.Index, b.Index)); return cachedColumns; }