2016-12-06 39 views
0

我有一個DataGridViewBookNumber,Title,AuthorNum,PricequantityInStock。我想在用戶按下按鈕時按書號搜索行。這是我的,但它不起作用。如何使用按鈕按ID搜索DataGridView?

如何顯示只有用戶輸入書號的行?現在當我按下輸入時,不會出現任何行。任何幫助,將不勝感激。

Dim str As String 
    str = InputBox("Enter an Book Number:", "Book Selection", "") 
    TblBooksTableAdapter.Fill(BooksDataSet.tblBooks) 

    Dim nums = (From n In BooksDataSet.tblBooks 
     Where n.BookNumber = str 
     Select n.BookNumber, n.Title, n.AuthorNum, n.Price, n.QuantityInStock).ToList 

    DataGridView1.DataSource = BooksDataSet 

回答

0

你需要一個'DataView'恕我直言,以最簡單的方式做到這一點。此外,DataGridViews與數據表相比,更好地處理好POCO集合,所以我通常在設計器上設置一個。在這種情況下,我拖放了一個名爲'ds'的數據集到我的設計表面上,而不是在'Tables'集合上創建'tProducts'。該代碼例子是這樣的:

Public Class DynamicFilterOnTwoTextItems 

    Public Class ProductSku 
    Public Property ProductId As Integer 
    Public Property SkuID As Integer 
    Public Property Description As String 
    End Class 

    Private _products As List(Of ProductSku) = New List(Of ProductSku) 
    Private _initialLoadDone As Boolean = False 

    Private Sub DynamicComboBoxDoubleFill_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    dgv.AutoGenerateColumns = False 

    Dim products = New List(Of ProductSku)({ 
            New ProductSku With {.ProductId = 1, .SkuID = 1, .Description = "Offline"}, 
            New ProductSku With {.ProductId = 1, .SkuID = 2, .Description = "Offline2"}, 
            New ProductSku With {.ProductId = 2, .SkuID = 1, .Description = "Online"}, 
            New ProductSku With {.ProductId = 2, .SkuID = 2, .Description = "Online2"} 
            }) 

    Dim s = "" 
    For Each o In _products 
     Dim row As DataRow = ds.Tables("tProducts").NewRow 
     row("ProductId") = o.ProductId 
     row("SkuID") = o.SkuID 
     row("Desc") = o.Description 
     ds.Tables("tProducts").Rows.Add(row) 
    Next 

    dgv.AutoGenerateColumns = False 
    dgv.DataSource = ds.Tables("tProducts") 

    _initialLoadDone = True 
    End Sub 

    Private Sub bFilter_Click(sender As Object, e As EventArgs) Handles bFilter.Click 

    Dim predicate = String.Empty 

    If String.IsNullOrEmpty(tsku.Text) Then 
     predicate = $"ProductID = '{CInt(tPrd.Text)}'" 
    Else 
     predicate = $"ProductID = '{CInt(tPrd.Text)}' and SkuID = '{CInt(tsku.Text)}'" 
    End If 
    Dim dvProducts = New DataView(ds.Tables("tProducts"), predicate, "ProductID ASC", DataViewRowState.CurrentRows) 

    dgv.DataSource = dvProducts 
    End Sub 
End Class 
0
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles 

SearchTextBox.TextChanged 

MainListView.Clear() 
    DT = ExecuteQuery("SELECT * FROM Prac4 WHERE LastName LIKE '%" & SearchTextBox.Text & "%' OR FirstName Like '%" & SearchTextBox.Text & "%'") 
    With MainListView 
     .View = View.Details 
     .GridLines = True 
     .FullRowSelect = True 
    End With 
    MainListView.Columns.Add("EmpID", 100, HorizontalAlignment.Left) 
    MainListView.Columns.Add("FirstName", 100, HorizontalAlignment.Left) 
    MainListView.Columns.Add("LastName", 100, HorizontalAlignment.Left) 
    MainListView.Columns.Add("MiddleName", 100, HorizontalAlignment.Left) 
    MainListView.Columns.Add("DateHire", 100, HorizontalAlignment.Left) 
    MainListView.Columns.Add("EmpType", 100, HorizontalAlignment.Left) 
    MainListView.Columns.Add("Rate", 100, HorizontalAlignment.Left) 
    For i As Integer = 0 To DT.Rows.Count - 1 
     Dim xItem As New ListViewItem(DT.Rows(i)("EmpID").ToString) 
     xItem.SubItems.Add(DT.Rows(i)("FirstName").ToString) 
     xItem.SubItems.Add(DT.Rows(i)("LastName").ToString) 
     xItem.SubItems.Add(DT.Rows(i)("MiddleName").ToString) 
     xItem.SubItems.Add(DT.Rows(i)("DateHire").ToString) 
     xItem.SubItems.Add(DT.Rows(i)("EmpType").ToString) 
     xItem.SubItems.Add(DT.Rows(i)("Rate").ToString) 
     MainListView.Items.Add(xItem) 
    Next 
End Sub 

剛剛嘗試在它改變的東西。