使用 DevExpress SpreadsheetControl 限制单元格内容

Limit cell contents using DevExpress SpreadsheetControl

我正在尝试使用 DevExpress SpreadsheetControl 将列中的单元格截断为固定数量的字符。我通过遍历每个单元格并使用以下代码手动截断它来使其工作:

 for (int i = 0; i <= rowCount; ++i)
 {
            worksheet.Columns[0][i].Value = worksheet.Columns[0][i].Value.ToString().Substring(0, 15);
 }

但这非常慢。我想知道控件中是否有一种方法可以告诉它自动截断单元格?

编辑

我找到了可以将 sheet 导出到数据表并在其上执行子字符串的地方。这要快得多:

        var dataTable = worksheet.CreateDataTable(worksheet.GetUsedRange(), true);
        var exporter = worksheet.CreateDataTableExporter(worksheet.GetUsedRange(), dataTable, true);
        exporter.Export();

        for (int i = 0; i < dataTable.Rows.Count; ++i)
        {
            dataTable.Rows[i][0] = dataTable.Rows[i][0].ToString().Substring(0, 15);
        }

        worksheet.Import(dataTable, true, 0, 0);

我还是想看看 API.

中是否有更好的内置控件或其他地方的方法

您的代码非常慢,因为 SpreadsheetControl 正在尝试根据任何单元格中的任何更改来更新其内容。因此,您只需要在 运行 代码之前锁定更新并在之后解锁。对于 lock/unlock 更新,您可以使用 SpreadsheetControl.BeginUpdate and SpreadsheetControl.EndUpdate 方法。
这是示例:

spreadsheetControl1.BeginUpdate();

var cells = spreadsheetControl1.ActiveWorksheet.GetUsedRange();

foreach (var cell in cells)
    cell.Value = cell.Value.ToString().Substring(0, 15);

spreadsheetControl1.EndUpdate();