将列表框转换为 DataGridView
Posted
技术标签:
【中文标题】将列表框转换为 DataGridView【英文标题】:Convert listbox to DataGridView 【发布时间】:2019-04-06 14:00:26 【问题描述】:我希望从列表框更改为 DataGridView。
从列表框中,我可以查看数据并使用查看/下载 varbinary 选择项目。
我可以用 DataGridView 做同样的事情吗?
这是我的代码:
Dim sqlcon As New SqlConnection("Data Source=DESKTOP-U7KC2PG\SQLEXPRESS;Initial Catalog=kankon;Integrated Security=True")
Dim cmd As SqlCommand
Dim adapter As SqlDataAdapter
Dim ofd As New OpenFileDialog
Dim Dt As New DataTable
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
adapter = New SqlDataAdapter("select ID, Label + Extension as 'FileName', [Filesys] from TBL_FILES", sqlcon)
adapter.Fill(Dt)
Me.ListBox1.DataSource = Dt
Me.ListBox1.DisplayMember = "FileName"
Me.ListBox1.ValueMember = "ID"
Me.Dt.Constraints.Add("Primary", Dt.Columns("ID"), True)
Catch ex As Exception
End Try
End Sub
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
Try
Dim FileName As String = Me.ListBox1.Text
Dim row As DataRow = Dt.Rows.Find(ListBox1.SelectedValue)
Dim file_data() As Byte = CType(row(2), Byte())
Dim fs As New FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write)
fs.Write(file_data, 0, file_data.Length)
Process.Start(FileName)
Catch ex As Exception
End Try
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Try
ofd.Filter = "All File (*.*) |*.*"
If ofd.ShowDialog = DialogResult.OK Then
Label1.Text = ofd.FileName
End If
Catch ex As Exception
End Try
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
cmd = New SqlCommand("Insert into TBL_FILES (Label, Filesys,Extension) values (@Label, @Filesys, @Extension)", sqlcon)
sqlcon.Open()
cmd.Parameters.Add(New SqlParameter("@Label", SqlDbType.NVarChar, 50)).Value = TextBox1.Text
cmd.Parameters.Add(New SqlParameter("@Extension", SqlDbType.NVarChar, 50)).Value = TextBox1.Text
Dim fs As New FileStream(ofd.FileName, FileMode.Open, FileAccess.Read)
Dim br As New BinaryReader(fs)
Dim file() As Byte = br.ReadBytes(br.BaseStream.Length)
cmd.Parameters.Add(New SqlParameter("Filesys", SqlDbType.VarBinary)).Value = file
cmd.ExecuteNonQuery()
sqlcon.Close()
MsgBox(" file saved ", MsgBoxStyle.Information, "info")
Catch ex As Exception
End Try
End Sub
【问题讨论】:
将您的DataTable
绑定到BindingSource
,然后将其绑定到DataGridView
。当用户选择一行时,您可以从BindingSource
的Current
属性中获取底层DataRowView
。你可以对ListBox
做同样的事情。
对不起,我是初学者编码,您能帮我编写新代码吗?我的 DataGridView 名称是 TBL_FILESDataGridView ,数据集是 TBL_FILES 谢谢
作为初学者并不意味着等待别人为你编写代码。这意味着研究适当的主题以找到您可以使用的信息。我为您提供了可用于进行该研究的关键字。现在你需要这样做。
永远不要使用空的 try-catch。您总是想知道异常是什么,以便修复它。
【参考方案1】:
根据评论和您的回复,您似乎选择尝试使用 datagridview...这里有一些有用的代码来使用这些。
注意:我将假设您正在使用简单的 sqlCommand 来获取数据,如果不忽略其中的“com”部分,因为我只是将其包括在内以向您展示其工作流程。注意:在重复使用之前清除数据集是一个好主意,以确保您已清除旧数据。
您可能还需要考虑将对象重命名为更合适的名称,例如“dsTblFiles”和“gvTblFiles”。
Dim adapter as New SqlDataAdapter()
TBL_FILES.Clear()
adapter.SelectCommand = com
adapter.Fill(TBL_FILES)
TBL_FILESDataGridView.DataSource = TBL_FILES.Tables(0)
TBL_FILESDataGridView.DataBind()
adapter = Nothing
【讨论】:
一个DataGridView
没有DataBind
方法。
我试过了,但没用,我会尽快添加所有代码
文件打开它,但是打开它时出现错误( System.ArgumentOutOfRangeException: '索引超出范围。必须是非负数并且小于集合的大小。参数名称:索引)) - Private Sub TBL_FILESDataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles TBL_FILESDataGridView.CellContentClick adapter.Fill(Dt) TBL_FILESDataGridView.DataSource = TBL_FILESBindingSource.ToString TBL_FILESDataGridView.Rows(3).Cells(0).Value.ToString() 适配器= 没有结束子以上是关于将列表框转换为 DataGridView的主要内容,如果未能解决你的问题,请参考以下文章