Я заполнил свою таблицу данных случайными значениями и формулой, такой как = SUM (A1: A2) , когда в таблице данных имеется 150 столбцов и 4000 строк, тогда ReoGrid занимает около 20 минут.
когда я заполняю ReoGrid без формулы, тогда заполнение ReoGrid занимает несколько секунд, но в тот момент, когда многие формулы SUM присваиваются ячейке динамически, тогда ReoGrid занимает много времени для заполнения.
Здесь я делюсь своимикод.поэтому моя просьба, пожалуйста, ребята, посмотрите на мою логику кода и скажите, есть ли недостаток при назначении формулы для многих ячеек ReoGrid.
, скажите, пожалуйста, как я могу упростить логику для заполнения сетки формулой.Есть ли способ увеличить производительность моего кода с формулой, в результате ReoGrid может быть заполнен в течение нескольких секунд или нескольких минут.
Ищете предложения и рекомендации.ReoGrid - бесплатный компонент для приложения winform https://reogrid.net/.
Вот мой код
private void btnBindTable_Click(object sender, EventArgs e)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
string strSum = "", strColName, strImmediateOneUp = "", strImmediateTwoUp = "";
int startsum = 0;
int currow = 0;
bool firstTimeSum = true;
int NumRows = 4000;
int NumColumns = 150;
var sheet = reoGrd.CurrentWorksheet;
sheet.Resize(NumRows, NumColumns); // resize
DataTable dt = new DataTable();
for (int col = 0; col < NumColumns; col++)
{
strColName = GenerateColumnText(col);
DataColumn datacol = new DataColumn(strColName, typeof(string));
dt.Columns.Add(datacol);
}
for (int row = 0; row < NumRows; row++)
{
dt.Rows.Add();
for (int col = 0; col < NumColumns; col++)
{
if (row < 2)
{
dt.Rows[row][col] = new Random().Next(1, NumRows).ToString("D2");
}
else
{
if (firstTimeSum)
{
if (row - currow == 2)
{
currow = row;
startsum = 0;
firstTimeSum = false;
}
else
{
startsum = 1;
}
}
else
{
if (row - currow == 3)
{
currow = row;
startsum = 0;
}
}
if (startsum == 0)
{
strColName = GenerateColumnText(col);
strImmediateOneUp = strColName + ((row + 1) - 1).ToString();
strImmediateTwoUp = strColName + ((row + 1) - 2).ToString();
dt.Rows[row][col] = strSum;
string cellname = GenerateColumnText(col) + (row + 1).ToString();
var cell = sheet.Cells[cellname];
cell.Style.BackColor = Color.LightGoldenrodYellow;
}
else
{
dt.Rows[row][col] = new Random().Next(1, NumRows).ToString("D2");
}
}
}
startsum = 1;
}
sheet["A1"] = dt;
stopwatch.Stop();
TimeSpan timeSpan = stopwatch.Elapsed;
MessageBox.Show(string.Format("Time elapsed: {0}h {1}m {2}s {3}ms", timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds));
}