private void CopyCsvRowToDataRow(int rowIdx, string[] row, DataRow dataRow) { int changedCount = 0; System.Text.StringBuilder oldSb = new System.Text.StringBuilder(); System.Text.StringBuilder newSb = new System.Text.StringBuilder(); for (int iCell = 0; iCell < row.Length; iCell++) { string iterCell = row[iCell]; string oldCell = (string)dataRow[iCell]; oldSb.Append(string.Format("\"{0}\"", oldCell)); newSb.Append(string.Format("\"{0}\"", iterCell)); if (iCell != row.Length - 1) { oldSb.Append(","); newSb.Append(","); } if (iterCell != oldCell) { changedCount++; CsvEditManager.CellValueChangeItem changeItem = new CsvEditManager.CellValueChangeItem(); changeItem.Row = rowIdx; changeItem.Column = iCell; changeItem.OldValue = oldCell; changeItem.NewValue = iterCell; m_CellChangeList.Add(changeItem); dataRow[iCell] = iterCell; } if (string.IsNullOrWhiteSpace(iterCell)) { DataGridViewConsoleForm.Message message = new DataGridViewConsoleForm.Message(); message.Level = DataGridViewConsoleForm.Level.Warning; message.Column = iCell; message.Row = rowIdx; message.Caption = "值为空"; message.Text = string.Format("源值:\n({0})", oldCell.ToString()); m_MessageList.Add(message); } } if (changedCount > 0) { DataGridViewConsoleForm.Message message = new DataGridViewConsoleForm.Message(); message.Level = DataGridViewConsoleForm.Level.Info; message.Column = -1; message.Row = rowIdx; message.Caption = string.Format("修改了({0})个单元格", changedCount); message.Text = string.Format("源:\n({0})\n合并后:\n({1})", oldSb.ToString(), newSb.ToString()); m_MessageList.Add(message); } }
/// <summary> /// 移除所有制表符并转换所有换行符 /// </summary> public void RemoveAllTabAndConvertAllLineBreaks() { BeforeChangeCellValue(); List <CsvEditManager.CellValueChangeItem> changeList = new List <CsvEditManager.CellValueChangeItem>(); List <DataGridViewConsoleForm.Message> messageList = new List <DataGridViewConsoleForm.Message>(); for (int rowIdx = 0; rowIdx < m_DataGridView.Rows.Count; rowIdx++) { DataGridViewRow iterRow = m_DataGridView.Rows[rowIdx]; for (int colIdx = 0; colIdx < iterRow.Cells.Count; colIdx++) { DataGridViewCell iterCell = iterRow.Cells[colIdx]; string iterValue = (string)iterCell.Value; if (!string.IsNullOrEmpty(iterValue)) { string newValue = iterValue.Replace("\t", ""); newValue = newValue.Replace("\r\n", "\n"); if (iterValue != newValue) { CsvEditManager.CellValueChangeItem change = new CsvEditManager.CellValueChangeItem(); change.Row = rowIdx; change.Column = colIdx; change.OldValue = iterValue; change.NewValue = newValue; changeList.Add(change); DataGridViewConsoleForm.Message message = new DataGridViewConsoleForm.Message(); message.Level = DataGridViewConsoleForm.Level.Info; int indexOfTab = iterValue.IndexOf('\t'); if (indexOfTab > 0 && indexOfTab < iterValue.Length - 1) { message.Level = DataGridViewConsoleForm.Level.Warning; } message.Row = rowIdx; message.Column = colIdx; message.Caption = "移除制表符并转换换行符"; message.Text = string.Format("源:\n({0})\n转换后:\n({1})", iterValue, newValue); messageList.Add(message); iterCell.Value = newValue; } } } } EditManager.DidCellsValueChange(changeList); AfterChangeCellValue(); DataGridViewConsoleForm.ShowForm(messageList, m_DataGridView, "移除所有制表符并转换所有换行符"); MessageBox.Show(string.Format("移除所有制表符并转换所有换行符完成, 转换了({0})个单元格", messageList.Count), "提示"); }