2013-09-12 2 views
0

Я хочу скопировать выделенные строки из представления моей сетки данных в буфер обмена И это отлично работает, только одно: я не успеваю удалить последние 3 пробела из строки. (я также попробовать: clipboard.Remove(clipboard.Length - 3) и clipboard.Trim(), но оба не работают слишком)TrimEnd не стирать последние пробелы

Моя функция:

private void menuCopyClipboard_wholeRow_Click(object sender, EventArgs e) 
{ 
    #region calculate spaces 
    int[] spaces = new int[8]; // I have 8 columns in the data grid view 
    for (int i = 0; i < 8; i++) 
     spaces[i] = 0; 


    foreach (DataGridViewRow dgvr in datagridview1.SelectedRows) 
     foreach (DataGridViewColumn dgvc in datagridview1.Columns) 
     { 
      int cellLength = datagridview1.Rows[dgvr.Index].Cells[dgvc.Index].FormattedValue.ToString().Length; 
      if (spaces[dgvc.Index] < cellLength) 
       spaces[dgvc.Index] = cellLength; 
     } 
    #endregion 

    string clipboard = ""; 
    foreach (DataGridViewRow dgvr in datagridview1.SelectedRows) 
    { 
     foreach (DataGridViewColumn dgvc in datagridview1.Columns) 
       clipboard += String.Format("{0, -" + spaces[dgvc.Index] + "} ", // 3 spaces between columns 
              datagridview1.Rows[dgvr.Index].Cells[dgvc.Index].FormattedValue.ToString()); 

     if (dgvr.Index != 0 && datagridview1.SelectedRows.Count > 1) clipboard += "\n"; // to not add enter after last line nor copy one line 
    } 

    clipboard.TrimEnd(); // <-- doens't erase spaces 
    Clipboard.SetText(clipboard); 
} 

Проблема: Промежутки не стирается, как вы можете видеть на картинке ниже:

enter image description here

(вопрос: что не так, почему пробелы не удаляются?)

+3

'clipboard = clipboard.Trim();' –

+0

@ AlessandroD'Andria Я пробую это. это не работает – AsfK

+1

, но вы добавляете «\ n» в конце строки. См. В отладчике, который является значением буфера обмена перед Trim(). –

ответ

2

Строки неизменяемы.

Это означает, что метод манипуляции строкой, такой как TrimEnd(), всегда будет возвращать новую строку.

Так как это сделать:

clipboard = clipboard.Trim(); 

будет просто исправить вашу проблему.

Если вам также необходимо удалить \n вы можете использовать это:

char[] trimChars = new char[]{' ','\n'}; 
clipboard = clipboard.TrimEnd(trimChars); 
+0

спасибо, секундная работа решения: 'char [] trimChars = new char [] {'', '\ n'};' но я не понимаю, почему, я не вставляю новую строку после последней строки ... (последняя индекс в цикле равен нулю ...) – AsfK

1

TrimEnd() удаляет все завершающие вхождения набора символов, заданных в массиве из текущего объекта String, и возвращает результирующую строку, поэтому вы должны получить преобразованную строку.

char[] charsToTrim = {' '}; 
clipboard = clipboard.TrimEnd(charsToTrim); 
0

Используйте этот

clipboard.Trim(); 

Вместо:

clipboard.TrimEnd(); 
+0

Это может привести к тому же. Просто посмотри мой ответ. – Heslacher

1

В этой строке

if (dgvr.Index != 0 && datagridview1.SelectedRows.Count > 1) clipboard += "\n"; // to not add enter after last line nor copy one line 

Вы добавляете «\ n» в конце строки, это предотвращает попытку Trim перед тем, как добавить «\ n».

if (dgvr.Index != 0 && datagridview1.SelectedRows.Count > 1) clipboard = clipboard.Trim() + "\n"; // to not add enter after last line nor copy one line 
else clipboard = clipboard.Trim(); 
Смежные вопросы