我想将文件拖放到DataGridView中。
我有一个包含以下代码的表单。
当我单击Button1时,两个计数都返回Zero。
当我在DataGridView上拖动文件时dt.Rows.Count
返回零,而dt.DefaultView.Count
返回One。这是为什么?
我的印象是,当我第一次点击按钮时,拖动文件然后两个计数然后返回零。在进行拖动时,是否必须以特殊方式初始化DataGridView或数据表?
Public Class Form1
Private WithEvents bs As New BindingSource
Private WithEvents dt As New DataTable
Public Sub New()
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
Dim col As DataColumn = New DataColumn("col1", GetType(String))
dt.Columns.Add(col)
dt.PrimaryKey = New DataColumn() {dt.Columns(0)}
bs.DataSource = dt
DataGridView1.AutoGenerateColumns = False
DataGridView1.Columns.Add(New DataGridViewTextBoxColumn With {.DataPropertyName = "col1", .Name = "col1", .HeaderText = "col1", .ReadOnly = True})
DataGridView1.DataSource = bs
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Debug.Print(dt.Rows.Count)
Debug.Print(dt.DefaultView.Count)
End Sub
Private Sub DataGridView1_DragEnter(sender As Object, e As DragEventArgs) Handles DataGridView1.DragEnter
Debug.Print(dt.Rows.Count)
Debug.Print(dt.DefaultView.Count)
End Sub
End Class
增加:
正如评论家所说:我不想知道Drop是如何工作的,我需要设置effect
并且我需要Drop-Code。
当我打电话给DataGridView.Datasource.DefaultView.ToTable()
时,我偶然发现了这一点。
我刚发布了这个最小的样本,显示我是否在随机时间点(按钮单击)或在Drag'n'Drop操作期间是否计数存在差异。
为什么呢?
我深入研究了这一点。在DragEnter处理程序dt.DefaultView.addNewRow
中设置为一个对象。我打电话给dt.AcceptChanges()
,幻影行消失了。首先是为什么/由谁创建/何时创建的?
dt.DefaultView.Item(0).Row
,并且包含一个带有DBNULL.value的列