我想将选定的行从数据网格视图复制到剪贴板
它的工作完美,只有一件事:我没有成功从字符串中删除最后3个空格。
(我也尝试:clipboard.Remove(clipboard.Length - 3)
和clipboard.Trim()
,但两者都不起作用)
我的功能:
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);
}
问题:没有删除的空间,如下图所示:
(问题:什么错?为什么没有删除空格?)
答案 0 :(得分:2)
字符串是不可变的。
有人说,像TrimEnd()这样的字符串操作方法将始终返回一个新字符串。
这样做:
clipboard = clipboard.Trim();
只会解决您的问题。
如果您还需要删除\n
,可以使用此功能:
char[] trimChars = new char[]{' ','\n'};
clipboard = clipboard.TrimEnd(trimChars);
答案 1 :(得分:1)
TrimEnd()从当前String对象中删除数组中指定的一组字符的所有尾随事件,并返回结果字符串,因此您应该接收转换后的字符串。
char[] charsToTrim = {' '};
clipboard = clipboard.TrimEnd(charsToTrim);
答案 2 :(得分: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();
答案 3 :(得分:0)
使用此
clipboard.Trim();
而不是:
clipboard.TrimEnd();