Como: Usar o DataGrid no Pocket PC
Este exemplo demonstra técnicas para usar o DataGrid controle de formulários para exibição e edição de um registro selecionado na DataGrid controle e adicionar um novo registro ao banco de dados. Observe que uma interface de usuário deve ser fornecida para editar DataGrid valores, como edição de DataGrid Não há suporte para as células na .NET Compact Framework. Este exemplo usa o banco de dados Northwind, instalado com o Visual Studio.
Observação: |
---|
Se você estiver usando o .NET Compact Framework versão 2.0, você deve adicionar uma referência ao sistema.Windows.Forms.DataGrid.dll em seu projeto para usar o DataGrid controle. |
A BindingSource objeto fornece acesso ao registro selecionado atualmente no banco de dados, que é passado para o construtor de resumo e edita formulários para que a mesma fonte de ligação é usada por todos os formulários. Além disso, para controles de vinculação de dados, um BindingSource objeto pode retornar um DataRowView objeto da linha corrente. Você pode usar DataRowView para acessar sistema autônomo dados para uma variedade de propósitos, sistema autônomo determinar o valor corrente de uma coluna. Observe que para fins de demonstração, apenas duas colunas são usadas no exemplo para o resumo e a edição de formulários.
Como alternativa, você pode ter Visual Studio gerando resumos e editando formulários automaticamente, selecionando Gerar formulários de dados no menu de atalho para a marca SMART em um DataGrid controle. Para obter mais informações sobre esse recurso, consulte Como: Gerar resumo e editar modos de exibição para aplicativos de dados (dispositivos).
Este aplicativo tem os formulários descritos na tabela a seguir.Também listados estão as opções menu.
Formulário |
Recursos |
Opções de menu |
---|---|---|
Formulário principal (Formulário1) |
Exibe o DataGrid controle. |
Novo Adiciona um novo registro para o banco de dados e exibe o Formulário EditView. Editar Exibe o Formulário EditView. |
SummaryView |
Exibe valores de coluna do registro corrente, otimizada para exibição. |
(Nenhum) |
EditView |
Exibe valores de coluna do registro corrente, otimizado para edição. |
Feito Aceita a caixa, atualiza o banco de dados, e exibe o formulário principal. Cancel Cancelar a caixa de diálogo e exibe o formulário principal. |
Para criar o projeto e criar o formulário principal
In Visual Studio, crie um projeto dispositivo inteligente e defina a plataforma de destino para Windows Mobile 5.0 Pocket PC SDK ou o Windows Mobile 6 Professional SDK.
No menu Data, clique em Add New Data Source.
No fonte de dados configuração assistente, se conectar a Northwind banco de dados usando o Microsoft SQL servidor Compact edição (.NET estrutura Data provedor for SQL servidor CE).The Northwind de banco de dados, Northwind.sdf, está instalado na pasta \Arquivos de Programas\Microsoft SQL servidor Compact edição\v3.5\Exemplos.
Observação: No Windows Vista, você deve executar Visual Studio sistema autônomo administrador para acessar o banco de dados Northwind. Para obter mais informações sobre como adicionar um banco de dados, consulte Como: Adicionar um banco de dados a um projeto de dispositivo.
No escolher seus objetos de banco de dados página do assistente, selecionar o Produtos tabela e todas as suas colunas.
From a Caixa de ferramentas, add a DataGrid controle ao formulário. Defina suas propriedades Tamanho e Layout conforme desejado.
conjunto o DataSource propriedade para o Produtos tabela.Visual Studio Adiciona o NorthwindDataSet, ProductsBindingSource, e ProductsTableAdapter objetos a seu projeto.
Estilo de DataGrid controle para mostrar uma ou duas colunas da tabela, adicionando um DataGridTableStyle objeto para o TableStyles coleção. Clique na propriedade TableStyles no painel Properties.Essa ação exibe a caixa de diálogo DataGridTableStyle Collection Editor.Faça o seguinte:
Adicionar um DataGridTableStyle objeto para o TableStyles coleção.
Especifique a Propriedade " Produtos " para a MappingName .
Clique na Propriedade GridColumnStyle.Essa ação exibe a Caixa de diálogo DataGridColumnStyle Collection Editor.
Adicionar um DataGridTextBoxColumn objeto para o GridColumnStyles coleção.
Clique na Propriedade MappingName e selecione Product Name.
Defina os Header Text e Width desejados.
Repita para colunas adicionais.
Feche as caixas de diálogo.
Adicione duas formas ao projeto, uma para a exibição Resumo e uma para o modo de exibição de edição.Nomeie-os SummaryView e EditView.
Adicione um parâmetro para o construtores dos formulários SummaryView e EditView para tirar um BindingSource objeto. Declare uma variável, globalCurrentBindingSouce, nesses formulários a ser conjunto para o BindingSource objeto que é passado no construtor. Observe que deve ser conjunto antes do InitializeComponent método é chamado.
Os desenvolvedores de Visual Basic necessário adicionar um Sub-rotina New para o formulário, adicionando um Novo método a partir do canto superior direito Nome do método lista no painel de código.
Dim CurrentBindingSource As BindingSource Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource InitializeComponent() End Sub
private BindingSource CurrentBindingSource; public SummaryView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); }
In the main form, add a MenuItem object named New(MenuItem1), and another named Edit (MenuItem2).Adicione o seguinte código para o novo e edição Click eventos.
' Add new record. Private Sub MenuItem1_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles MenuItem1.Click ProductsBindingSource.AllowNew = True ProductsBindingSource.AddNew() ' Pass the binding source to the form. Dim EditViewDialog As New EditView(ProductsBindingSource) If EditViewDialog.ShowDialog() <> DialogResult.OK Then ProductsBindingSource.CancelEdit() Else ProductsBindingSource.EndEdit() Me.ProductsTableAdapter.Update(Me.NorthwindDataSet) End If End Sub ' Edit record. Private Sub MenuItem2_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles MenuItem2.Click ' Pass the binding source to the form. Dim EditViewDialog As New EditView(ProductsBindingSource) If EditViewDialog.ShowDialog() <> DialogResult.OK Then ProductsBindingSource.CancelEdit() Else ProductsBindingSource.EndEdit() Me.ProductsTableAdapter.Update(Me.NorthwindDataSet) End If End Sub
// Add new record. private void menuItem1_Click(object sender, EventArgs e) { productsBindingSource.AllowNew = true; productsBindingSource.AddNew(); EditView EditViewDialog = new EditView(productsBindingSource); if (EditViewDialog.ShowDialog() != DialogResult.OK) { productsBindingSource.CancelEdit(); } else { ProductsBindingSource.EndEdit(); this.productsTableAdapter.Update(this.northwindDataSet); } } // Edit record (Edit). private void menuItem2_Click(object sender, EventArgs e) { EditView EditViewDialog = new EditView(productsBindingSource); if (EditViewDialog.ShowDialog() != DialogResult.OK) { productsBindingSource.CancelEdit(); } else { productsBindingSource.EndEdit(); this.productsTableAdapter.Update(this.northwindDataSet); } }
No formulário principal, adicione código para o KeyDown evento para o DataGrid controle ocorre quando a tecla ação é pressionada no Pocket PC. Essa ação exibe o formulário SummaryView.
' Action button pressed. Private Sub DataGrid1_KeyDown(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) _ Handles DataGrid1.KeyDown If (e.KeyCode = Keys.Enter) Then Dim SummaryViewDialog As New SummaryView(ProductsBindingSource) SummaryViewDialog.ShowDialog() End If End Sub
// Action button pressed. private void dataGrid1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { SummaryView SummaryViewDialog = new SummaryView(productsBindingSource); SummaryViewDialog.ShowDialog(); } }
Para criar a exibição de Resumo
Adicione os seguintes controles ao formulário SummaryView:
A Labelcontrolar para o título nome do produto, sistema autônomo "Product Name:".
A Label controle para o valor do nome do produto.
A Label controle para o valor Descontínuo, que é exibido somente quando o valor da coluna Descontinuado da tabela Produtos é true. Titule esse rótulo como " DISCONTINUED " com uma fonte vermelha.
Adicione o seguinte código para o construtor para o formulário SummaryView para definir as vinculações de dados.Declare uma variável de formulário chamada CurrentBindingSource para ser conjunto para passado BindingSource instância no construtor do formulário. A DataRowView objeto que determina se a coluna Descontinuado for true, o rótulo Descontinuado é exibido.
'Dim CurrentBindingSource As BindingSource Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource ' This call is required by the Windows Forms Designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. ' Bind the label that shows the product name. ProductNameLabelVal.DataBindings.Add("Text", _ CurrentBindingSource, "Product Name") ' Show the Discontinued label if ' that value is true in the database. Dim drView As DataRowView drView = CurrentBindingSource.Current If drView.Item("Discontinued") = True Then DiscontinuedLabel.Visible = True Else DiscontinuedLabel.Visible = False End If End Sub
private BindingSource CurrentBindingSource; public SummaryView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); // Bind the label that shows the product name. ProductNameLabelVal.DataBindings.Add("Text", CurrentBindingSource, "Product Name"); // Show the Discontinued label if // that value is true in the database. DataRowView drView; drView = (DataRowView) CurrentBindingSource.Current; if (drView["Discontinued"] == true) { DiscontinuedLabel.Visible = true; } else { DiscontinuedLabel.Visible = false; } }
Para criar o modo de edição
Adicionar uma referência para o Microsoft.WindowsCE.Forms espaço para nome em seu projeto.
arrastar um InputPanel componente das Caixa de ferramentas para o formulário EditView.É necessária apenas uma instância para fornecer ao usuário o soft Painel de Entrada (SIP) para inserir texto em uma caixa de texto.
Adicionar os seguintes controles ao formulário:
A Label controle de caixa de texto Nome do produto.
A TextBox controle para a coluna Nome do produto.
A CheckBox controle para a coluna Descontinuado. conjunto o seu ThreeState propriedade para true.
Para conjunto vinculações de dados, adicione o seguinte código ao construtor do formulário após o InitializeComponent Chame. Este código acomoda adição de um novo registro ou edição de um registro existente.Se um novo registro for sendo adicionado, um DataRowView objeto determina se nessa coluna Descontinuado tem um valor nulo e define o NullValue propriedade da ligação para o Indeterminate valor da CheckState propriedade.
Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource InitializeComponent() ' Add the bindings. ProductNameTextBox.DataBindings.Add("Text",_ CurrentBindingSource, "Product Name") Dim drView As DataRowView drView = CurrentBindingSource.Current If IsDBNull(drView("Discontinued")) Then DiscontinuedCheckBox.DataBindings.Add("CheckState",_ CurrentBindingSource, "Discontinued", True,_ DataSourceUpdateMode.OnValidation, _ CheckState.Indeterminate) Else DiscontinuedCheckBox.DataBindings.Add("Checked",_ CurrentBindingSource, "Discontinued") End If End Sub
public EditView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); CurrentBindingSource = bsource; InitializeComponent(); // Add the bindings. productNameTextBox.DataBindings.Add("Text", CurrentBindingSource, "Product Name"); DataRowView drView; drView = (DataRowView) CurrentBindingSource.Current; if (drView("Discontinued") == null) { DiscontinuedCheckBox.DataBindings.Add("CheckState", CurrentBindingSource, "Discontinued", true, DataSourceUpdateMode.OnValidation, CheckState.Indeterminate); } else { DiscontinuedCheckBox.DataBindings.Add("Checked", CurrentBindingSource, "Discontinued"); } }
Add a MenuItem object titled Doneto update the database with the changes and return to the main form.
' Done Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click Me.DialogResult = DialogResult.OK Me.Close() End Sub // Done private void menuItem1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; this.Close(); }
Add a MenuItem object titled Cancel,on the same level as Done, to discard the changes and return to the main form.
' Cancel Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click Me.DialogResult = DialogResult.Cancel Me.Close() End Sub
// Cancel private void menuItem1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); }
Compilando o código
Este exemplo requer referências aos seguintes namespaces:
Consulte também
Tarefas
Como: Usar o DataGrid no Smartphone
Conceitos
Generating a Strongly Typed DataSet