private void pasteToolStripMenuItem_Click(object sender, EventArgs e) //粘贴
{
if (this.dataGridView1.CurrentCell == null) return;
string paste = Clipboard.GetText();
paste = paste.ToString().Trim();
if (string.IsNullOrEmpty(paste)) return;
char[] rowSplitter = { '\r', '\n' };
char[] columnSplitter = { '\t' };
IDataObject dataInClipboard = Clipboard.GetDataObject();
string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);
string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries);
stringInClipboard = stringInClipboard.Replace("?", ""); //刪除转行的行未空格
int r = dataGridView1.SelectedCells[0].RowIndex; //获得单元格位置
int cc = dataGridView1.SelectedCells[0].ColumnIndex;
if (dataGridView1.Rows.Count < (r + rowsInClipboard.Length))
{
dataGridView1.Columns.Clear(); //避免被抗干扰,可以不写
dataGridView1.DataSource = null; //如果有绑定数据源,此处要取消;如果没有绑定,可以不用此语句
dataGridView1.Columns.Add("最短时间(H)", "腊模静置最短时间(H)");//从此栏算起的4栏大多数情况下不用写,它是根据上一行的 dataGridView1.DataSource = null 而增加的
dataGridView1.Columns["腊模静置最短时间(H)"].ValueType = typeof(double);
dataGridView1.Columns.Add("建档日期", "建档日期");
dataGridView1.Columns["建檔日期"].ValueType = typeof(DateTime);
dataGridView1.Rows.Add(r + rowsInClipboard.Length - dataGridView1.Rows.Count);
}
for (int iRow = 0; iRow < rowsInClipboard.Length; iRow++)
{
string[] valuesInRow = rowsInClipboard[iRow].Split(columnSplitter);
for (int iCol = 0; iCol < valuesInRow.Length; iCol++)
{
if ((r + iRow) > (dataGridView1.Rows.Count - 1)) //如果拷贝数据超过现有单元格长度,要中止运行,否则会报错
{ break; }
else if (dataGridView1.ColumnCount - 1 >= cc + iCol)
{
//DataGridViewCell cell = dataGridView1.Rows[r + iRow].Cells[cc + iCol];
//if (!cell.ReadOnly)
//{
// cell.Value = valuesInRow[iCol];
//}
dataGridView1.Rows[r + iRow].Cells[cc + iCol].Value = valuesInRow[iCol]; //被注释的语句,与此处作用相同
}
}
}
if (dt1_copy.Rows.Count > 0) //必须要有数据
{
for (int i = dt1_copy.Rows.Count; i < dataGridView1.Rows.Count; i++) //dt1_copy 获取未新增行时的数据(未点击"新增"前), 以下代码与 dataGridView1.DataSource = null 有关,没有dataGridView1.DataSource = null 可以不用写以下代码
{
DataRow dr = dt1_copy.NewRow();
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
dr[dataGridView1.Columns[j].Name] = dataGridView1.Rows[i].Cells[j].Value;
}
dt1_copy.Rows.Add(dr);
}
dataGridView1.Columns.Clear();
dataGridView1.DataSource = dt1_copy; //重新绑定数据源
}
}
{
if (this.dataGridView1.CurrentCell == null) return;
string paste = Clipboard.GetText();
paste = paste.ToString().Trim();
if (string.IsNullOrEmpty(paste)) return;
char[] rowSplitter = { '\r', '\n' };
char[] columnSplitter = { '\t' };
IDataObject dataInClipboard = Clipboard.GetDataObject();
string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);
string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries);
stringInClipboard = stringInClipboard.Replace("?", ""); //刪除转行的行未空格
int r = dataGridView1.SelectedCells[0].RowIndex; //获得单元格位置
int cc = dataGridView1.SelectedCells[0].ColumnIndex;
if (dataGridView1.Rows.Count < (r + rowsInClipboard.Length))
{
dataGridView1.Columns.Clear(); //避免被抗干扰,可以不写
dataGridView1.DataSource = null; //如果有绑定数据源,此处要取消;如果没有绑定,可以不用此语句
dataGridView1.Columns.Add("最短时间(H)", "腊模静置最短时间(H)");//从此栏算起的4栏大多数情况下不用写,它是根据上一行的 dataGridView1.DataSource = null 而增加的
dataGridView1.Columns["腊模静置最短时间(H)"].ValueType = typeof(double);
dataGridView1.Columns.Add("建档日期", "建档日期");
dataGridView1.Columns["建檔日期"].ValueType = typeof(DateTime);
dataGridView1.Rows.Add(r + rowsInClipboard.Length - dataGridView1.Rows.Count);
}
for (int iRow = 0; iRow < rowsInClipboard.Length; iRow++)
{
string[] valuesInRow = rowsInClipboard[iRow].Split(columnSplitter);
for (int iCol = 0; iCol < valuesInRow.Length; iCol++)
{
if ((r + iRow) > (dataGridView1.Rows.Count - 1)) //如果拷贝数据超过现有单元格长度,要中止运行,否则会报错
{ break; }
else if (dataGridView1.ColumnCount - 1 >= cc + iCol)
{
//DataGridViewCell cell = dataGridView1.Rows[r + iRow].Cells[cc + iCol];
//if (!cell.ReadOnly)
//{
// cell.Value = valuesInRow[iCol];
//}
dataGridView1.Rows[r + iRow].Cells[cc + iCol].Value = valuesInRow[iCol]; //被注释的语句,与此处作用相同
}
}
}
if (dt1_copy.Rows.Count > 0) //必须要有数据
{
for (int i = dt1_copy.Rows.Count; i < dataGridView1.Rows.Count; i++) //dt1_copy 获取未新增行时的数据(未点击"新增"前), 以下代码与 dataGridView1.DataSource = null 有关,没有dataGridView1.DataSource = null 可以不用写以下代码
{
DataRow dr = dt1_copy.NewRow();
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
dr[dataGridView1.Columns[j].Name] = dataGridView1.Rows[i].Cells[j].Value;
}
dt1_copy.Rows.Add(dr);
}
dataGridView1.Columns.Clear();
dataGridView1.DataSource = dt1_copy; //重新绑定数据源
}
}