无法将类型 'System.Data.DataView' 的对象转换为类型 'System.Data.DataTable'
Unable to cast object of type 'System.Data.DataView' to type 'System.Data.DataTable'
在 VB.NET 中,我有 Button1,它填充了 datagridview1,我想要的是使用 textbox1_TextChanged 作为特定列的过滤器进行过滤。
我做错了什么?
我如何使用来自已绑定的网格数据源的源创建新的 dvs?
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim _Session As ESSession
'Dim _dataset As DataSet
Dim _IMainUI As IMainUI
_IMainUI = Entersoft.Framework.Windows.Components.ESMainUI.GetMainUI()
_Session = _IMainUI.UISession
'Fill datagridview1
Dim SQL As String = "SELECT userid ,name , Inactive FROM esgouser order by userid"
Dim SQLParams As Hashtable = ESResMngr.CreateCIHashTable()
Dim ds As DataSet = _Session.FetchDS(SQL, Nothing, Nothing, SQLParams)
Dim dt As DataTable = ds.Tables(0)
Dim dv As New DataView(dt)
'Dim k As New DataView(dt)
DataGridView1.DataSource = dv
DataGridView1.Columns("Userid").DataPropertyName = "Userid"
DataGridView1.Columns("Name").DataPropertyName = "Name"
DataGridView1.Columns("InActive").DataPropertyName = "Inactive"
For Each row As DataGridViewRow In DataGridView1.Rows
If row.Cells(2).Value = "0" Then
row.DefaultCellStyle.BackColor = Color.FromArgb(0, 250, 154)
Else
row.DefaultCellStyle.BackColor = Color.FromArgb(255, 69, 0)
End If
Next
End Sub
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim dvs As New DataView(CType(DataGridView1.DataSource, DataTable))
dvs.RowFilter = String.Format("userid like '%{0}%'", TextBox1.Text)
DataGridView1.DataSource = dvs
End Sub
好吧,您在以下行中指定 DataView
作为 DataGridView
的来源:
Dim dv As New DataView(dt)
DataGridView1.DataSource = dv
然后您想将其转换为 DataTable
:
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim dvs As New DataView(CType(DataGridView1.DataSource, DataTable))
' ...
End Sub
这不起作用,您需要将其转换为 DataView
:
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim dvs As DataView = CType(DataGridView1.DataSource, DataView)
dvs.RowFilter = String.Format("userid like '%{0}%'", TextBox1.Text)
' DataGridView1.DataSource = dvs ' unnecessary
End Sub
因为它已经分配给 DataGridView1.DataSource
你可以省略最后一行。
在 VB.NET 中,我有 Button1,它填充了 datagridview1,我想要的是使用 textbox1_TextChanged 作为特定列的过滤器进行过滤。
我做错了什么? 我如何使用来自已绑定的网格数据源的源创建新的 dvs?
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim _Session As ESSession
'Dim _dataset As DataSet
Dim _IMainUI As IMainUI
_IMainUI = Entersoft.Framework.Windows.Components.ESMainUI.GetMainUI()
_Session = _IMainUI.UISession
'Fill datagridview1
Dim SQL As String = "SELECT userid ,name , Inactive FROM esgouser order by userid"
Dim SQLParams As Hashtable = ESResMngr.CreateCIHashTable()
Dim ds As DataSet = _Session.FetchDS(SQL, Nothing, Nothing, SQLParams)
Dim dt As DataTable = ds.Tables(0)
Dim dv As New DataView(dt)
'Dim k As New DataView(dt)
DataGridView1.DataSource = dv
DataGridView1.Columns("Userid").DataPropertyName = "Userid"
DataGridView1.Columns("Name").DataPropertyName = "Name"
DataGridView1.Columns("InActive").DataPropertyName = "Inactive"
For Each row As DataGridViewRow In DataGridView1.Rows
If row.Cells(2).Value = "0" Then
row.DefaultCellStyle.BackColor = Color.FromArgb(0, 250, 154)
Else
row.DefaultCellStyle.BackColor = Color.FromArgb(255, 69, 0)
End If
Next
End Sub
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim dvs As New DataView(CType(DataGridView1.DataSource, DataTable))
dvs.RowFilter = String.Format("userid like '%{0}%'", TextBox1.Text)
DataGridView1.DataSource = dvs
End Sub
好吧,您在以下行中指定 DataView
作为 DataGridView
的来源:
Dim dv As New DataView(dt)
DataGridView1.DataSource = dv
然后您想将其转换为 DataTable
:
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim dvs As New DataView(CType(DataGridView1.DataSource, DataTable))
' ...
End Sub
这不起作用,您需要将其转换为 DataView
:
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim dvs As DataView = CType(DataGridView1.DataSource, DataView)
dvs.RowFilter = String.Format("userid like '%{0}%'", TextBox1.Text)
' DataGridView1.DataSource = dvs ' unnecessary
End Sub
因为它已经分配给 DataGridView1.DataSource
你可以省略最后一行。