private void FillDefaultData(ExtendedDataGrid exGrid) { DataTable dataTable = new DataTable("DataTable" + this.NumberOfSheets); int rowsNum = 17; int colsNum = 13; for (int i = 0; i < colsNum; i++) { dataTable.Columns.Add(new DataColumn(SSColumns.ToString(i), typeof(SpreadsheetCell))); } for (int i = 0; i < rowsNum; i++) { var row = dataTable.NewRow(); dataTable.Rows.Add(row); for (int j = 0; j < colsNum; j++) { string cellName = SSColumns.ToString(j) + i; row[j] = new SpreadsheetCell(string.Empty, dataTable, new SpreadsheetCellCustomInfo(new CellName(cellName, i, j))); } } this.DataTables.Add(dataTable); exGrid.ItemsSource = dataTable.DefaultView; }
/// <summary> /// Resize table by creating new and copying old values /// </summary> /// <param name="exGrid"></param> /// <param name="oldDataTable"></param> /// <param name="rowsNum"></param> /// <param name="colsNum"></param> private void ResizeTable(ExtendedDataGrid exGrid, DataTable oldDataTable, int rowsNum, int colsNum) { int boundRows = oldDataTable.Rows.Count < rowsNum ? oldDataTable.Rows.Count : rowsNum; int boundCols = oldDataTable.Columns.Count < colsNum ? oldDataTable.Columns.Count : colsNum; DataTable newDataTable = new DataTable(oldDataTable.TableName); for (int i = 0; i < colsNum; i++) { newDataTable.Columns.Add(new DataColumn(SSColumns.ToString(i), typeof(SpreadsheetCell))); } for (int i = 0; i < rowsNum; i++) { var row = newDataTable.NewRow(); newDataTable.Rows.Add(row); for (int j = 0; j < colsNum; j++) { string cellName = SSColumns.ToString(j) + i; row[j] = new SpreadsheetCell(string.Empty, newDataTable, new SpreadsheetCellCustomInfo(new CellName(cellName, i, j))); } } // copy data for (int i = 0; i < boundRows; i++) { for (int j = 0; j < boundCols; j++) { SpreadsheetCell cell = newDataTable.GetSpreadsheetCell(i, j); SpreadsheetCell oldCell = oldDataTable.GetSpreadsheetCell(i, j); cell.Content = oldCell.Content; cell.Tag = oldCell.Tag; } } this.DataTables[this.CurrentSheetNumber] = newDataTable; // VERY VERY DIRTY HACK because nulling throws exception, dunno why try { exGrid.ItemsSource = null; } catch { } exGrid.ItemsSource = newDataTable.DefaultView; }
/// <summary> /// Gets sum of selected cells content /// </summary> /// <param name="chartBy"></param> /// <returns></returns> private Dictionary <string, double> GetChartDataOfSelectedCells(ChartBy chartBy) { Dictionary <string, double> drawChart = new Dictionary <string, double>(); var dataGrid = (ExtendedDataGrid)((TabItem)WorkspaceTabControl.Items[this.CurrentSheetNumber]).Content; foreach (var cellInfo in dataGrid.SelectedCells) { // this changes the cell's content not the data item behind it var gridCell = dataGrid.TryToFindGridCell(cellInfo); if (gridCell != null) { string columnHeader = gridCell.Column.Header.ToString(); int rowIndex = dataGrid.Items.IndexOf(cellInfo.Item); string coord = chartBy == ChartBy.Rows ? rowIndex.ToString() : columnHeader; var cell = this.DataTables[this.CurrentSheetNumber].GetSpreadsheetCell(rowIndex, SSColumns.Parse(columnHeader)); if (!drawChart.ContainsKey(coord)) { drawChart.Add(coord, 0); } if (cell.Content == string.Empty) { continue; } double doubleVal; if (double.TryParse(cell.Content, out doubleVal)) { drawChart[coord] += doubleVal; } else { throw new Exception("Some of selected cells contains non-numeric values!"); } } } if (drawChart.Count == 0) { throw new Exception("Please select cells to graph from!"); } return(drawChart); }