karthik82.vk
Member
- Joined
- Oct 31, 2012
- Messages
- 8
- Programming Experience
- Beginner
Hi,
I am creating a spreadsheet comparison tool in vb.net. The tool will allow user to paste contents copied from the clipboard into two datagridview in the form and will compare the data.
I want to generate the columns based on the clipboard contents dynamically. When i paste the data in the datagridview, the rows are getting generated based on the clipboard contents but the columns are not. I am manually specifying, the number of columns and i dont want to do so. the columns in the clipboard must also get automatically created like the rows.
Here is the code i am using.
The above code generates only the rows and not the columns. I worked on the above code and modified it so that it could generate the columns.
But i am getting the error "Value of type 'Integer' cannot be converted to 'System.Windows.Forms.DataGridViewColumn'." on the line
"dgv.Columns.Add(c + colsInClipboard.Length - dgv.ColumnCount)".
Can you please help me in this?
Thanks in advance...
I am creating a spreadsheet comparison tool in vb.net. The tool will allow user to paste contents copied from the clipboard into two datagridview in the form and will compare the data.
I want to generate the columns based on the clipboard contents dynamically. When i paste the data in the datagridview, the rows are getting generated based on the clipboard contents but the columns are not. I am manually specifying, the number of columns and i dont want to do so. the columns in the clipboard must also get automatically created like the rows.
Here is the code i am using.
VB.NET:
Sub pastefromclipboardtodatagridview(ByVal dgv As DataGridView)
Dim rowSplitter As Char() = {vbCr, vbLf}
Dim columnSplitter As Char() = {vbTab}
'get the text from clipboard
Dim dataInClipboard As IDataObject = Clipboard.GetDataObject()
Dim stringInClipboard As String = CStr(dataInClipboard.GetData(DataFormats.Text))
'split it into lines
Dim rowsInClipboard As String() = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries)
'get the row and column of selected cell in grid
Dim r As Integer = dgv.SelectedCells(0).RowIndex
Dim c As Integer = dgv.SelectedCells(0).ColumnIndex
'add rows into grid to fit clipboard lines
If (dgv.Rows.Count < (r + rowsInClipboard.Length)) Then
dgv.Rows.Add(r + rowsInClipboard.Length - dgv.Rows.Count)
End If
' loop through the lines, split them into cells and place the values in the corresponding cell.
Dim iRow As Integer = 0
While iRow < rowsInClipboard.Length
'split row into cell values
Dim valuesInRow As String() = rowsInClipboard(iRow).Split(columnSplitter)
'cycle through cell values
Dim iCol As Integer = 0
While iCol < valuesInRow.Length
'assign cell value, only if it within columns of the grid
If (dgv.ColumnCount - 1 >= c + iCol) Then
dgv.Rows(r + iRow).Cells(c + iCol).Value = valuesInRow(iCol)
End If
iCol += 1
End While
iRow += 1
End While
End Sub
The above code generates only the rows and not the columns. I worked on the above code and modified it so that it could generate the columns.
VB.NET:
Sub pastefromclipboardtodatagridview(ByVal dgv As DataGridView)
Dim rowSplitter As Char() = {vbCr, vbLf}
Dim columnSplitter As Char() = {vbTab}
'get the text from clipboard
Dim dataInClipboard As IDataObject = Clipboard.GetDataObject()
Dim stringInClipboard As String = CStr(dataInClipboard.GetData(DataFormats.Text))
'split it into lines
Dim rowsInClipboard As String() = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries)
Dim colsInClipboard As String() = stringInClipboard.Split(columnSplitter, StringSplitOptions.RemoveEmptyEntries)
'get the row and column of selected cell in grid
Dim r As Integer = dgv.SelectedCells(0).RowIndex
Dim c As Integer = dgv.SelectedCells(0).ColumnIndex
'add rows into grid to fit clipboard lines
If (dgv.Rows.Count < (r + rowsInClipboard.Length)) Then
dgv.Rows.Add(r + rowsInClipboard.Length - dgv.Rows.Count)
End If
'add columns into grid to fit clipboard lines
If (dgv.ColumnCount < (c + colsInClipboard.Length)) Then
dgv.Columns.Add(c + colsInClipboard.Length - dgv.ColumnCount)
End If
' loop through the lines, split them into cells and place the values in the corresponding cell.
Dim iRow As Integer = 0
While iRow < rowsInClipboard.Length
'split row into cell values
Dim valuesInRow As String() = rowsInClipboard(iRow).Split(columnSplitter)
'cycle through cell values
Dim iCol As Integer = 0
While iCol < valuesInRow.Length
'assign cell value, only if it within columns of the grid
If (dgv.ColumnCount - 1 >= c + iCol) Then
dgv.Rows(r + iRow).Cells(c + iCol).Value = valuesInRow(iCol)
End If
iCol += 1
End While
iRow += 1
End While
End Sub
But i am getting the error "Value of type 'Integer' cannot be converted to 'System.Windows.Forms.DataGridViewColumn'." on the line
"dgv.Columns.Add(c + colsInClipboard.Length - dgv.ColumnCount)".
Can you please help me in this?
Thanks in advance...