2017-02-13 105 views
2

我試圖從Excel工作表中將行粘貼到C#中的DataGridView。 我用下面的代碼:如何將Excel中的多行粘貼到C#中的DataGridView中?

private void PasteClipboard(DataGridView myDataGridView) 
    { 
     DataObject o = (DataObject)Clipboard.GetDataObject(); 
     if (o.GetDataPresent(DataFormats.Text)) 
     { 
      if (myDataGridView.RowCount > 0) 
       myDataGridView.Rows.Clear(); 

      if (myDataGridView.ColumnCount > 0) 
       myDataGridView.Columns.Clear(); 

      bool columnsAdded = false; 
      string[] pastedRows = Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd("\r\n".ToCharArray()), "\r\n"); 
      foreach (string pastedRow in pastedRows) 
      { 
       string[] pastedRowCells = pastedRow.Split(new char[] { '\t' }); 

       if (!columnsAdded) 
       { 
        for (int i = 0; i < pastedRowCells.Length; i++) 
         myDataGridView.Columns.Add("col" + i, pastedRowCells[i]); 

        columnsAdded = true; 
        continue; 
       } 

       myDataGridView.Rows.Add(); 
       int myRowIndex = myDataGridView.Rows.Count - 1; 

       using (DataGridViewRow myDataGridViewRow = myDataGridView.Rows[myRowIndex]) 
       { 
        for (int i = 0; i < pastedRowCells.Length; i++) 
         myDataGridViewRow.Cells[i].Value = pastedRowCells[i]; 
       } 
      } 

enter image description here

然而,作爲一個結果,只有一個行包含數據,而其他都是空的。例如,如果我複製並粘貼3行,第三行是唯一包含數據的行,而另外兩行是空的。我究竟做錯了什麼?

+0

爲什麼不將Clibboard數據轉換爲DataTable然後使用它? – Ron

回答

2

你需要這樣做:

int myRowIndex = myDataGridView.Rows.Add(); 

取而代之的是:

myDataGridView.Rows.Add(); 
int myRowIndex = myDataGridView.Rows.Count - 1; 

注意,當你創建一個新的行,你還會收到該行的索引,它的返回值myDataGridView.Rows.Add();。您的代碼忽略該值,而是假定新創建的行始終是最後一行:myDataGridView.Rows.Count - 1;

+0

所以你的意思是我必須替換myDataGridView.Rows.Count - 1;由myDataGridView.Rows.Add(); ? –

+0

是的,你需要像@Andy所說的那樣替換那一行。 –

+0

是的,你是對的。謝謝@Andy和@M A​​deel Khalid –

相關問題