2017-03-18 11 views
0

以下のコードを使用して、選択したdatagridview行のみをクリップボードテキストに配置しました。vb.netの選択した行のコピー貼り付けで注文が変更されています

`

  Dim ClipBoardBuilder As New StringBuilder() 

      For Each row As DataGridViewRow In MyRows 
       For Each Column As DataGridViewColumn In dgv1.Columns 
        If Column.Visible = True Then ClipBoardBuilder.Append(row.Cells(Column.DisplayIndex).FormattedValue.ToString() + vbTab) 
       Next 
       ClipBoardBuilder.AppendLine() 
      Next 

      If dgv1.GetClipboardContent() IsNot Nothing Then Clipboard.SetText(ClipBoardBuilder.ToString()) 


      Dim ClipBoardText as string = Clipboard.GetText() 

`

が、グリッドにそれを貼り付けながら、選択された行の順序を変更してきています。例えば row1 - A1 B1 C1 row2 - A2 B2 C2 row3 - A3 B3 C3 ため は、クリップボードにはちょうど反対以下のようなものとして示されているグリッドに貼り付けている間、元のように順序配列を作成する方法 row3 - A3 B3 C3 row2 - A2 B2 C2 row1 - A1 B1 C1 下に示したのと同様に、グリッドに貼り付けなっ。

ありがとうございました....

答えて

0

グリッドビューを並べ替えることができます。

+0

。私は、なぜ文字列ビルダーを入れた後、クリップボードを入れた後に注文が変更されるのかという質問をしていますか? 同じコピーされた行を同じグリッドに貼り付けた後、注文が変更されるためです。 コピー順 ' 行1行2 ROW3 ' が、ペースト順序が ' ROW3 ROW2 ROW1 ' なぜですか? – picnic4u

+0

申し訳ありませんが@ picnic4u私は間違っています。しかし、私はあなたのコードを通過している。私にとってクリップボードのテキストの順序は変更されていません。私の正しい順序でのそのショー – PRABA

0

ここでは、選択した行を繰り返しています。選択した行が選択された順序で表示されています。

ユーザーが第1行、第3行、第2行を選択した場合。その場合には選択された行は、行コレクションでの選択順序ごと 1行目に 第三行を意味 第二行として存在します

私は文字列ビルダを使用してクリップボードに対処していながら、そう、それはあたりとしてコピーなっています選択されたシーケンスの順序は、行インデックスの順番通りではありません。

これは反復する前に、選択した行を以下のようにインデックス順にソートしています。今、それが唯一の希望順に貼り付けなっている

Dim dgvRows As List(Of DataGridViewRow) = (From c As DataGridViewRow In dgv1.SelectedRows.Cast(Of DataGridViewRow)() Select c Order By c.Index).Cast(Of DataGridViewRow)().ToList

0

私は、選択された行がどのように構成されているかについて混乱があると推測しています。 SelectedRowsDataGridViewSelectedRowCollectionを返します。あなたが気付いたように、このコレクションの順序は、最後に選択された行がコレクション内のインデックス0(0)にあり、選択された最初の行がコレクションのLASTインデックスにあるようなものです。

ユーザーが行を選択した元の順序を取得する場合は、コレクションを元に戻すか、最後の索引から最初のコレクションまでループすることができます。これは、ユーザーが行を選択した元の順序を取得します。

ユーザーがトップダウン方式で行を選択すると想定できないことに注意してください。ユーザーは行2、行9、行4、行3の順に選択できます。行は連続した順序です。これらの選択された行で何をしているのかがはっきりしないので、行を削除することはあなたがやっていることではないと思います。

以下は、選択した行の元の順序を取得する方法の簡単な例です。注:DataGridViewSelectionModeFullRowSelectに設定する必要があります。これは物事をクリアすることを願っています。間違った解釈のために残念

enter image description here

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    FillGrid() 
End Sub 

Private Sub FillGrid() 
    For i = 1 To 15 
    DataGridView1.Rows.Add("Row" + i.ToString() + "C1", "Row" + i.ToString() + "C2", "Row" + i.ToString() + "C3") 
    Next 
End Sub 

Private Sub btSelectedRows_Click(sender As Object, e As EventArgs) Handles btSelectedRows.Click 
    TextBox1.Text += "Reverse selected values --------" + Environment.NewLine 
    TextBox1.Text += "There are " + DataGridView1.SelectedRows.Count.ToString() + " selected Rows" + Environment.NewLine 
    For Each curSelectedRow As DataGridViewRow In DataGridView1.SelectedRows 
    If Not curSelectedRow.IsNewRow Then ' ignore new row if selected 
     TextBox1.Text += curSelectedRow.Cells(0).Value + ", " + curSelectedRow.Cells(1).Value + ", " + curSelectedRow.Cells(2).Value + Environment.NewLine 
    End If 
    Next 
    TextBox1.Text += "End of Reverse selected values --------" + Environment.NewLine 
End Sub 

Private Sub btOriginalSelection_Click(sender As Object, e As EventArgs) Handles btOriginalSelection.Click 
    TextBox1.Text += "Original order of selected values --------" + Environment.NewLine 
    TextBox1.Text += "There are " + DataGridView1.SelectedRows.Count.ToString() + " selected Rows" + Environment.NewLine 
    Dim selectedRows As DataGridViewSelectedRowCollection = DataGridView1.SelectedRows 
    For rowIndex = selectedRows.Count - 1 To 0 Step -1 
    If Not selectedRows(rowIndex).IsNewRow Then ' ignore new row if selected 
     TextBox1.Text += selectedRows(rowIndex).Cells(0).Value + ", " + selectedRows(rowIndex).Cells(1).Value + ", " + 
         selectedRows(rowIndex).Cells(2).Value + Environment.NewLine 
    End If 
    Next 
    TextBox1.Text += "End of Original selection order of selected values --------" 
End Sub 

エンドクラス

関連する問題