我正在尝试编写一个具有SELECT语句的按钮来从一个表中获取信息,但我希望信息显示在数据网格视图中。
从数据网格视图中,此数据将存储在同一数据库中的不同表中。
以前我使用过列表框来显示信息,但我无法将其保存在数据库中。
这是我用于列表框的代码:
listbox.items.add
{while mydatareader.read
{add.("item_name")
有没有什么方法可以像我在列表框上那样在数据网格视图上显示它?
我正在使用datagrid视图textboxcolumn列。
答案 0 :(得分:2)
我确定有很多方法可以做到这一点,但试试这个。假设您有一个名为“TestSample”的数据库,该表有三列名为“Column1”,“Column2”,“Column3”。接下来在表单上添加一个ListView控件并将其命名为“ListDisplay”,可能还有两个按钮用于测试目的。接下来,您需要创建列,您可以通过此类代码
来创建Private Sub CreateColumns()
'ListDisplay is the name of the ListView Control'
ListDisplay.View = View.Details
ListDisplay.FullRowSelect = True
'Create Columns'
ListDisplay.Columns.Add("Column1", 200, HorizontalAlignment.Left)
ListDisplay.Columns.Add("Column2", 200, HorizontalAlignment.Left)
ListDisplay.Columns.Add("Column3", 200, HorizontalAlignment.Left)
End Sub
此代码可以从“Form Load”事件中调用,如
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Setup Colums'
CreateColumns()
End Sub
接下来是从数据库收集数据并插回数据库..这两个功能可以帮助
Private Sub FillTable(ByVal connString As String, ByVal QueryString As String)
'Clear Populated Items'
ListDisplay.Items.Clear()
'Setup Connection and query'
Dim conn As SqlConnection = New SqlConnection(connString)
Dim cmd As SqlCommand = New SqlCommand(QueryString, conn)
Dim da As SqlDataAdapter = New SqlDataAdapter(cmd)
'Setup Dataset'
Dim ds As New DataSet
'Populate Dataset'
conn.Open()
da.Fill(ds, "TestSample")
conn.Close()
'Free up memory'
cmd.Dispose()
conn.Dispose()
'Populate ListView Control'
For Each dr As DataRow In ds.Tables("TestSample").Rows
Dim items As New ListViewItem
items.Text = dr.Item(0).ToString()
items.SubItems.Add(dr.Item(1).ToString())
items.SubItems.Add(dr.Item(2).ToString())
ListDisplay.Items.Add(items)
Next
End Sub
Private Sub InsertBack(ByVal connString As String, ByVal QueryString As String, ByVal ParameterOne As String, ByVal ParameterTwo As String, ByVal ParameterThree As String)
'Setup Connection'
Dim conn As SqlConnection = New SqlConnection(connString)
Dim cmd As SqlCommand = New SqlCommand(QueryString, conn)
'Setup Parameters'
cmd.Parameters.Add("@Column1", SqlDbType.Text).Value = ParameterOne
cmd.Parameters.Add("@Column2", SqlDbType.Text).Value = ParameterTwo
cmd.Parameters.Add("@Column3", SqlDbType.Text).Value = ParameterThree
'Process data: Insert to database'
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
'Free up memory'
cmd.Dispose()
conn.Dispose()
End Sub
使用您可以调用的表单中的“Click Event”按钮填充ListView,如下所示
'Get data from database and populate ListView: Parameter requires connection string'
FillTable("Data Source=SERVER-PC;Initial Catalog=Database;Persist Security Info=True;User ID=UsernameIfRequired;Password=PasswordIfRequired", "SELECT * FROM TestSample")
连接字符串是一个示例,您将不得不提供自己的,也需要根据您的数据库修改查询字符串。最后要将数据插入到数据库中,让我们从您的ListView项目中说,如果它们已被修改,您可以这样做...
'Loop through all Items in the ListView and send to database'
For Each item As ListViewItem In ListDisplay.Items
'Add data to the database from ListView Items: Parameter requres connection string and the 3 input items (could be as many as you want)'
InsertBack("Data Source=SERVER-PC;Initial Catalog=Database;Persist Security Info=True;User ID=UsernameIfRequired;Password=PasswordIfRequired", "INSERT INTO TestSample (Column1,Column2,Column3) values (@Column1,@Column2,@Column3)", item.Text, item.SubItems(1).Text, item.SubItems(2).Text)
'Add data to the database from ListView Items: Parameter requres connection string and the 3 input items (could be as many as you want)'
InsertBack("Data Source=SERVER-PC;Initial Catalog=Database;Persist Security Info=True;User ID=UsernameIfRequired;Password=PasswordIfRequired", "INSERT INTO AnotherSample (Column1,Column2,Column3) values (@Column1,@Column2,@Column3)", item.Text, item.SubItems(1).Text, item.SubItems(2).Text)
Next
如您所见,数据可以发送到两个不同的表格。
答案 1 :(得分:0)
为什么不将第一个表复制到第二个表然后将gridview绑定到第二个表而不是尝试将gridview绑定到两个表?