2017-02-13 14 views
2

Excelシートの行をC#のDataGridViewに貼り付けようとしています。他は空であるが複数行をExcelのDataGridViewにC#で貼り付けるにはどうすればよいですか?

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行をコピー&ペーストすると、3行目がデータのある行で、他の2行は空です。私は間違って何をしていますか?あなたは新しい行を作成するとき、あなたはまた、戻り値として、その行のインデックスを受け取ること

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

注:この代わりの

int myRowIndex = myDataGridView.Rows.Add(); 

:あなたはこれを実行する必要が

+0

なぜ、ClibboardデータをDataTableに変換して使用しないのですか? – Ron

答えて

2

myDataGridView.Rows.Add();あなたのコードはその値を無視し、新しく作成された行が常に最後の行であるとみなします:myDataGridView.Rows.Count - 1;

+0

あなたは私がmyDataGridView.Rows.Count - 1を置き換える必要があることを意味しますか? 〜によってmyDataGridView.Rows.Add(); ? –

+0

はい、@Andyのようにその行を置き換える必要があります。 –

+0

はい、そうです。 @Andyと@M Adeel Khalidの両方に感謝します –

関連する問題