【发布时间】:2022-10-21 10:52:13
【问题描述】:
该窗体有一个文本字段和一个 DataGridView。需要在 DataGridView 中不显示 JSON 文件的全部内容的情况下,搜索 JSON 文件的内容并将搜索结果显示在 DataGridView 中。
您需要按 UserName 标记进行搜索。您需要开始在文本字段中输入名字或姓氏,并在 DataGridView 中显示找到的结果。
我知道如何在 DataGridView 中读取文本文件:
Imports System.IO
Imports Newtonsoft.Json
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim result = JsonConvert.DeserializeObject(Of List(Of Users))(File.ReadAllText("D:\Users.json"))
DataGridView1.DataSource = result
End Sub
Public Class Users
Public Property ID() As Integer
Public Property UserName() As String
Public Property Login() As String
Public Property Title() As String
Public Property Dep() As String
Public Property Mail() As String
Public Property Phone() As String
End Class
End Class
我也知道如何进行文件搜索。仅出于某种原因显示结果 - 找到的第一个元素:
Dim json As String = File.ReadAllText("D:\Users.json")
Dim objectList = JsonConvert.DeserializeObject(Of List(Of Users))(json)
Dim foundItem = objectList.Where(Function(underscore) underscore.UserName.Contains("Tom")).FirstOrDefault()
If foundItem IsNot Nothing Then
MessageBox.Show(foundItem.UserName)
Else
MsgBox("none")
End If
以及 json 文件本身的实际内容:
[
{
"id":"1",
"UserName":"Fred Smith",
"Login":"f.smith",
"Title":"engineer",
"Dep":"IT infrastcomcture",
"Mail":"f.smith@domain.com",
"Phone":"111",
},
{
"id":"2",
"UserName":"Ben Taylor",
"Login":"b.taylor",
"Title":"programmer",
"Dep":"IT infrastcomcture",
"Mail":"b.taylor@domain.com",
"Phone":"100",
},
{
"id":"3",
"UserName":"Steve Harris",
"Login":"s.harris",
"Title":"System Administrator",
"Dep":"IT infrastcomcture",
"Mail":"s.harris@domain.com",
"Phone":"263",
},
{
"id":"4",
"UserName":"Tom Walker",
"Login":"t.walker",
"Title":"engineer",
"Dep":"IT infrastcomcture",
"Mail":"t.walker@domain.com",
"Phone":"263",
},
{
"id":"5",
"UserName":"Tom Davis",
"Login":"t.davis",
"Title":"engineer",
"Dep":"IT infrastcomcture",
"Mail":"t.davis@domain.com",
"Phone":"200",
},
{
"id":"6",
"UserName":"Ben Walker",
"Login":"b.walker",
"Title":"System Administrator",
"Dep":"IT infrastcomcture",
"Mail":"b.walker@domain.com",
"Phone":"167",
},
]
【问题讨论】:
-
.FirstOrDefault()在.Where()子句之后有.FirstOrDefault(),因此该查询仅返回找到的第一个匹配项。 -- 请注意,紧随其后的If条件期待这种结果。 -- 您通常过滤数据源以仅显示符合某些条件的结果。我建议使用 BindingSource,因为它也可以用作过滤器。 -
如果您以代码的形式提供示例,我将不胜感激。提前致谢
-
你能澄清这是否是某种任务,因为 - 正如它所写的那样 - 它看起来像一个。没关系,就其本身而言,问题写得很好,但如果是这样的话,您可能需要使用特定的工具。是否包含 BindingSource?
-
是否可以在不绑定到 BindingSource 的情况下执行此操作?由于数据显示模式可能会改变。这不是一份工作,这是给你自己的。
-
BindingSource 与数据的呈现方式之间没有关系。
标签: json .net vb.net winforms datagridview