void AddDataGridView(DataGridView gridView, string s)
{
s = s.Replace("/", @""); //避免因为版本造成的斜杠问题,这里做统一处理
int RowCount = (s.Length - s.Replace("
", "").Length) / 2 + 1; //最终计算结果,这次覆盖所要影响的行数 /r/n只占2个字节所以是除2
int CellCount = (s.Length - s.Replace(" ", "").Length + RowCount) / RowCount; ; //~每行单元格数 /t的数量加行数=所有单元格数(第一个单元格会不计算)
string[,] Strarr = new string[RowCount, CellCount]; //用于记录复制的单元格信息的二维数组
for (int i = 0; i < RowCount; i++) //将单元格信息添加到数组中
{
string tem_s = s.Split(new string[] { "
" }, StringSplitOptions.None)[i];
for (int j = 0; j < CellCount; j++)
{
Strarr[i, j] = tem_s.Split(new string[] { " " }, StringSplitOptions.None)[j];
}
}
//获取选择单元格 以第一个单元格为0点向第四象限扩展 SelectedCells是以用户选择顺序或者拖动方向决定的 是不规律的
//为了保证和理性,这里所取的第一个单元格是左上角的单元格
int arrayX = 0, arrayY = 0; //二维数组坐标系
int startRow = gridView.Rows.Count, startColumn = gridView.ColumnCount; //起始的单元格坐标系
foreach (DataGridViewCell cell in gridView.SelectedCells) //迭代比较,获取2轴数字均最小的坐标
{
startRow = cell.RowIndex < startRow ? cell.RowIndex : startRow;
startColumn = cell.ColumnIndex < startColumn ? cell.ColumnIndex : startColumn;
}
for (int i = startRow; (arrayX < RowCount && i < gridView.Rows.Count); i++, arrayX++) //非空验证
{
arrayY = 0;
DialogResult dr=new DialogResult();
for (int j = startColumn; (arrayY < CellCount && j < gridView.ColumnCount); j++, arrayY++)
{
if (!string.IsNullOrEmpty(gridView.Rows[i].Cells[j].Value.ToString()))
{
dr = MessageBox.Show("继续操作会覆盖原内容!", "警告", MessageBoxButtons.OKCancel);
if (dr == DialogResult.OK)
break; //单元格非空时警示,确定操作退出循环继续赋值
else
return; //否则直接返回方法
}
}
if (dr == DialogResult.OK) //如果做了选择 则退出
break;
}
arrayX = arrayY = 0; //坐标系重置
for (int i = startRow; (arrayX < RowCount && i < gridView.Rows.Count); i++, arrayX++) //数据赋值
{
arrayY = 0;
for (int j = startColumn; (arrayY < CellCount && j < gridView.ColumnCount); j++, arrayY++)
{
gridView.Rows[i].Cells[j].Value = Strarr[arrayX, arrayY];
}
}
}
如果不需要覆盖检查,代码会简短一些