Com a ajuda do DataView, podemos criar diferentes visualizações para os dados armazenados no DataTable. Por exemplo, por meio do DataView, você pode usar diferentes ordens de classificação para visualizar os dados no DataTable ou filtrar os dados no DataTable com base no status da coluna de dados ou nas expressões de filtro. O importante é que quando precisarmos criar diferentes visualizações para os dados no DataTable e vincular esses dados aos controles do formulário, precisaremos usar o DataView para completá-lo.
DataView fornece uma visualização dinâmica de dados, ou seja, seu conteúdo, ordem de classificação e membros refletirão quaisquer alterações no DataTable de origem. Obviamente, o DataView é muito diferente do método DataTable.Select. O método Select retornará uma matriz de objetos DataRow da tabela de dados com base em uma expressão de filtro ou ordem de classificação específica, e seus membros e ordem de classificação são estáticos. Devido à natureza reativa dinâmica do DataView, ele é muito adequado para uso em aplicativos de vinculação de dados.
DataView fornece uma visualização dinâmica de uma única coleta de dados. Você pode aplicar diferentes ordens de classificação e condições de filtro à coleta de dados. Isso é um pouco semelhante à Visualização fornecida pelo banco de dados SQL Server. No entanto, ainda há uma grande diferença entre o DataView e a visualização do banco de dados, porque o DataView não pode ser usado como uma tabela de dados, nem pode fornecer uma visualização para conectar a tabela de dados. Além disso, você não só não pode excluir campos na tabela de dados de origem, como também não pode adicionar campos adicionais que não existem na tabela de dados de origem (por exemplo: campos de expressão).
Você pode criar um DataView de duas maneiras. A primeira maneira é usar o construtor DataView e a segunda maneira é criar uma referência à propriedade DefaultView do DataTable. Este artigo explorará em detalhes como usar esses dois métodos para criar DataView.
Usando o construtor DataView
O construtor DataView fornece três versões multiload conforme mostrado na tabela abaixo.
Versão multiload do construtor DataView
DataView()
DataView (tabela ByVal como DataTable)
DataView (tabela ByVal como DataTable, _
ByVal RowFilter como string, _
ByVal classificar como string, _
ByVal RowState como DataViewRowState)
A primeira versão do construtor DataView inicializa uma nova instância da classe DataView sem nenhum parâmetro. Observe que se você usar esta versão para criar um DataView, você deve primeiro definir a propriedade Table após criar o objeto DataView para determinar sua DataTable de origem, e então você pode continuar a definir outras propriedades (RowFilter, Sort...etc.) .
O código de programa a seguir demonstra como usar a primeira versão do construtor DataView para criar um objeto DataView a fim de filtrar e classificar as colunas de dados da tabela de dados "Zhang Limin Studio" no conjunto de dados e vincular o controle DataGridView a este Visualização de dados. Descobrimos que o controle DataGrid exibirá apenas mulheres e os dados serão organizados na ordem dos traços dos nomes, do maior para o menor. A seguir está o código do programa para este exemplo:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
'Cria objeto DataView
Dim dv As DataView = New DataView
' Como o construtor DataView sem nenhum parâmetro é usado para criar o objeto DataView,
' Portanto, a propriedade Table deve ser definida primeiro para determinar sua DataTable de origem
dv.Table = Ds Zhang Limin Studio. Zhang Limin Studio
' Define a ordem de classificação para que a ordem dos traços do nome seja organizada do maior para o menor.
dv.Sort = "NameDESC"
' Define condições de filtro para exibir apenas mulheres
dv.RowFilter = "Gender = 'Female'"
' Vincule o controle DataGridView ao DataView
DataGridView1.DataSource = dv
A segunda versão do construtor DataView representa o uso do DataTable especificado para inicializar uma nova instância da classe DataView.
O código de programa a seguir demonstra como usar a segunda versão do construtor DataView para criar um objeto DataView a fim de filtrar e classificar as colunas de dados da tabela de dados "Zhang Limin Studio" no conjunto de dados e vincular o controle DataGridView a este DataView. Descobrimos que o controle DataGridView exibirá apenas os dados dos funcionários do “Departamento de Informação”, e os dados serão organizados de maior para menor de acordo com o salário atual:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' Cria um objeto DataView
Dim dv As DataView = New DataView(Ds Zhang Limin Studio. Zhang Limin Studio)
'Defina a ordem de classificação para classificar de maior para menor com base no salário atual
dv.Sort = "Salário Atual DESC"
'Definir condições de filtro para exibir apenas dados de funcionários do "Departamento de Informação"
dv.RowFilter = "Department = 'Information Department'"
' Vincule o controle DataGridView ao DataView
Me.DataGridView1.DataSource = dv
A terceira versão do construtor DataView representa a inicialização de uma nova instância da classe DataView usando DataTable, RowFilter, Sort e DataViewRowState especificados.
O código de programa a seguir demonstra como usar a terceira versão do construtor DataView para criar um objeto DataView a fim de filtrar e classificar as colunas de dados da tabela de dados "Zhang Limin Studio" no conjunto de dados e vincular o controle DataGridView a este DataView. Descobrimos que o controle DataGridView exibirá apenas os dados dos funcionários cujo salário atual seja superior a 49.000 yuans, e os dados serão organizados de maior para menor de acordo com o salário atual:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' Cria um objeto DataView
Dim dv As DataView = Novo DataView( _
Estúdio Zhang Limin.
"Salário atual > 49.000", _
"Salário atual DESC", _
DataViewRowState.CurrentRows)
' Vincula o controle DataGridView ao DataView
Me.DataGridView1.DataSource = dv
Gostaria de lembrar a todos que quando o DataView for criado, e quando alguma das propriedades Sort, RowFilter ou RowStateFilter for modificada, o índice do DataView será restabelecido. Isso significa que se você deseja aproveitar o melhor desempenho, você deve especificar a ordem de classificação ou os critérios de filtro diretamente no construtor ao criar o DataView. Se você não especificar diretamente a ordem de classificação ou as condições de filtro no construtor ao criar um DataView, mas em vez disso definir as propriedades Sort, RowFilter ou RowStateFilter do objeto DataView após criá-lo, o índice do DataView será restabelecido. o índice a ser criado pelo menos duas vezes.
Usando a propriedade DefaultView de DataTable
A propriedade DefaultView do DataTable retorna um objeto DataView que usa o DataTable como tabela de dados de origem, permitindo classificar, filtrar e pesquisar as colunas de dados no DataTable. Se o DataView que você cria deseja exibir todas as colunas de dados no DataTable e organizá-las em ordem natural, usar a propriedade DefaultView do DataTable será uma maneira muito direta e conveniente de criar o DataView.
Para o programa cuja tela de execução é mostrada na Figura 1, ele utiliza a propriedade DefaultView do DataTable para criar um DataView para que todas as colunas de dados da tabela de dados de origem possam ser exibidas no controle DataGrid no início, e permite ao usuário para passar o DataView durante a fase de execução para filtrar dados dinamicamente. O código do programa está listado abaixo:
'Declaração em nível de categoria do objeto DataView
Private dv As DataView
Private Sub DemoForm5_Load (ByVal sender As System.Object, _
ByVal e As System.EventArgs) Lida com MyBase.Load
FillComboBoxDepartment()
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' Criar DataView
dv = Ds Zhang Limin Studio. Zhang Limin Studio.DefaultView
' Exibe o número de colunas de dados no DataView.
txtRowCount.Text = dv.Count.ToString
' Vincula o controle DataGridView ao DataView
Me.DataGridView1.DataSource = dv
Fim Sub
Privado Sub FillComboBoxDepartment()
'Cria um objeto de comando de dados (ou seja, objeto SqlCommand)
Dim foxCMD como novo SqlCommand
foxCMD.Connection = SqlConnection1
foxCMD.CommandText = "SELECT DISTINCT Department FROM dbo.Zhang Limin Studio"
'Abra a conexão
SqlConnection1.Open()
usando myReader como SqlDataReader = foxCMD.ExecuteReader()
Se myReader.HasRows então
Enquanto myReader.Read()
ComboBoxDepartment.Items.Add(myReader.GetSqlString(0))
Terminar enquanto
Terminar se
Terminar de usar
ComboBoxDepartment.SelectedIndex = 0
End Sub
Private Sub btnFilter_Click (ByVal remetente como System.Object, _
ByVal e As System.EventArgs) Lida com btnFilter.Click
dv.RowFilter = "Departamento= '" & _
ComboBoxDepartment.SelectedItem.ToString() & "'"
'Exibe o número de colunas de dados no DataView
txtRowCount.Text = dv.Count.ToString
Fim Sub
http://www.cnblogs.com/liminzhang/archive/2006/10/23/537518.html