Con la ayuda de DataView, podemos crear diferentes vistas para los datos almacenados en DataTable. Por ejemplo, a través de DataView, puede usar diferentes órdenes de clasificación para ver los datos en DataTable o filtrar los datos en DataTable según el estado de la columna de datos o las expresiones de filtro. Lo importante es que cuando necesitamos crear diferentes vistas para los datos en DataTable y vincular estos datos a los controles en el formulario, necesitamos usar DataView para completarlo.
DataView proporciona una vista de datos dinámica, es decir, su contenido, orden de clasificación y miembros reflejarán cualquier cambio en el DataTable de origen. Obviamente, DataView es muy diferente del método DataTable.Select. El método Select devolverá una matriz de objetos DataRow de la tabla de datos en función de una expresión de filtro u orden de clasificación específicos, y sus miembros y orden de clasificación son estáticos. Debido a la naturaleza reactiva dinámica de DataView, es muy adecuado para su uso en aplicaciones de enlace de datos.
DataView le proporciona una vista dinámica de una única colección de datos. Puede aplicar diferentes criterios de clasificación y condiciones de filtrado a la colección de datos. Esto es algo similar a la vista proporcionada por la base de datos de SQL Server. Sin embargo, todavía existe una gran diferencia entre DataView y la vista de base de datos, porque DataView no se puede utilizar como una tabla de datos ni puede proporcionar una vista para conectar la tabla de datos. Además, no solo no puede excluir campos en la tabla de datos de origen, sino que tampoco puede agregar campos adicionales que no existen en la tabla de datos de origen (por ejemplo: campos de expresión).
Puede crear un DataView de dos maneras. La primera forma es utilizar el constructor DataView y la segunda forma es crear una referencia a la propiedad DefaultView de DataTable. Este artículo explorará en detalle cómo utilizar estos dos métodos para crear DataView.
Usando el constructor DataView
El constructor DataView proporciona tres versiones de carga múltiple, como se muestra en la siguiente tabla.
Versión de carga múltiple del constructor DataView
Vista de datos()
DataView (tabla ByVal como tabla de datos)
DataView (tabla ByVal como DataTable, _
ByVal RowFilter como cadena, _
ByVal Ordenar como cadena, _
ByVal RowState como DataViewRowState)
La primera versión del constructor DataView inicializa una nueva instancia de la clase DataView sin ningún parámetro. Tenga en cuenta que si usa esta versión para crear un DataView, primero debe configurar la propiedad Tabla después de crear el objeto DataView para determinar su DataTable de origen, y luego puede continuar configurando otras propiedades (RowFilter, Sort...etc.) .
El siguiente código de programa demuestra cómo utilizar la primera versión del constructor DataView para crear un objeto DataView con el fin de filtrar y ordenar las columnas de datos de la tabla de datos "Zhang Limin Studio" en el conjunto de datos y vincular el control DataGridView a este Vista de datos. Descubrimos que el control DataGrid solo mostrará mujeres y los datos se organizarán en el orden de los trazos de los nombres de mayor a menor. El siguiente es el código del programa para este ejemplo:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
'Crear objeto DataView
Dim dv As DataView = New DataView
' Dado que el constructor DataView sin ningún parámetro se utiliza para crear el objeto DataView,
' Por lo tanto, primero se debe establecer la propiedad Tabla para determinar su origen DataTable
dv.Table = Ds Zhang Limin Studio. Zhang Limin Studio
'Establezca el orden de clasificación para que el orden de los trazos del nombre sea de mayor a menor.
dv.Sort = "NameDESC"
' Establece condiciones de filtro para mostrar solo mujeres
dv.RowFilter = "Gender = 'Female'"
' Vincula el control DataGridView al DataView
DataGridView1.DataSource = dv
La segunda versión del constructor DataView representa el uso del DataTable especificado para inicializar una nueva instancia de la clase DataView.
El siguiente código de programa demuestra cómo utilizar la segunda versión del constructor DataView para crear un objeto DataView con el fin de filtrar y ordenar las columnas de datos de la tabla de datos "Zhang Limin Studio" en el conjunto de datos y vincular el control DataGridView a este Vista de datos. Descubrimos que el control DataGridView solo mostrará los datos de los empleados del "Departamento de Información", y los datos se ordenarán de mayor a menor según el salario actual:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
'Crea un objeto DataView
Dim dv As DataView = New DataView(Ds Zhang Limin Studio. Zhang Limin Studio)
'Establece el orden de clasificación para ordenar de mayor a menor según el salario actual
dv.Sort = "Salario actual DESC"
'Establecer condiciones de filtro para mostrar solo los datos de los empleados del "Departamento de Información"
dv.RowFilter = "Departamento = 'Departamento de información'"
' Vincula el control DataGridView al DataView
Me.DataGridView1.DataSource = dv
La tercera versión del constructor DataView representa la inicialización de una nueva instancia de la clase DataView utilizando el DataTable, RowFilter, Sort y DataViewRowState especificados.
El siguiente código de programa demuestra cómo utilizar la tercera versión del constructor DataView para crear un objeto DataView con el fin de filtrar y ordenar las columnas de datos de la tabla de datos "Zhang Limin Studio" en el conjunto de datos y vincular el control DataGridView a este Vista de datos. Descubrimos que el control DataGridView solo mostrará datos de empleados cuyo salario actual sea superior a 49.000 yuanes, y los datos se ordenarán de mayor a menor de acuerdo con el salario actual:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
'Crea un objeto DataView
Atenuar dv como DataView = Nuevo DataView( _
Estudio Ds Zhang Limin.
"Salario actual > 49000", _
"Salario actual DESC", _
DataViewRowState.CurrentRows)
' Vincula el control DataGridView al DataView
Me.DataGridView1.DataSource = dv
Me gustaría recordarles a todos que cuando se crea el DataView y cuando se modifica cualquiera de las propiedades Sort, RowFilter o RowStateFilter, se restablecerá el índice del DataView. Esto significa que si desea disfrutar del mejor rendimiento, debe especificar el orden de clasificación o los criterios de filtrado directamente en el constructor al crear el DataView. Si no especifica directamente el orden de clasificación o las condiciones de filtro en el constructor al crear un DataView, sino que establece las propiedades Sort, RowFilter o RowStateFilter del objeto DataView después de crearlo, se restablecerá el índice de DataView. el índice se creará al menos dos veces.
Usando la propiedad DefaultView de DataTable
La propiedad DefaultView de DataTable devuelve un objeto DataView que utiliza DataTable como tabla de datos de origen, lo que le permite ordenar, filtrar y buscar las columnas de datos en DataTable. Si el DataView que crea desea mostrar todas las columnas de datos en el DataTable y organizarlas en orden natural, usar la propiedad DefaultView del DataTable será una forma muy directa y conveniente de crear el DataView.
Para el programa cuya pantalla de ejecución se muestra en la Figura 1, utiliza la propiedad DefaultView de DataTable para crear un DataView de modo que todas las columnas de datos de la tabla de datos de origen se puedan mostrar en el control DataGrid al principio y permite al usuario para pasar el DataView durante la fase de ejecución para filtrar datos dinámicamente. El código del programa se enumera a continuación:
' Declaración a nivel de categoría del objeto DataView
Dv privado como DataView
Private Sub DemoForm5_Load (ByVal remitente como System.Object, _
ByVal y As System.EventArgs) maneja MyBase.Load
FillComboBoxDepartment()
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' Crear DataView
dv = Ds Zhang Limin Studio. Zhang Limin Studio.DefaultView
'Muestra el número de columnas de datos en DataView.
txtRowCount.Text = dv.Count.ToString
' Vincula el control DataGridView al DataView
Me.DataGridView1.DataSource = dv
Fin Sub
Sub Privado FillComboBoxDepartment()
'Crear un objeto de comando de datos (es decir, un objeto SqlCommand)
Dim foxCMD como nuevo SqlCommand
foxCMD.Connection = SqlConnection1
foxCMD.CommandText = "SELECCIONAR Departamento DISTINTO DE dbo.Zhang Limin Studio"
'Abrir la conexión
SqlConnection1.Open()
Usando myReader como SqlDataReader = foxCMD.ExecuteReader()
Si myReader.HasRows entonces
Mientras myReader.Read()
ComboBoxDepartment.Items.Add(myReader.GetSqlString(0))
terminar mientras
Terminar si
Finalizar el uso
ComboBoxDepartment.SelectedIndex = 0
End Sub
Private Sub btnFilter_Click (ByVal remitente como System.Object, _
ByVal y As System.EventArgs) maneja btnFilter.Click
dv.RowFilter = "Departamento = '" & _
ComboBoxDepartment.SelectedItem.ToString() & "'"
'Muestra el número de columnas de datos en el DataView
txtRowCount.Text = dv.Count.ToString
Fin Sub
http://www.cnblogs.com/liminzhang/archive/2006/10/23/537518.html