none
Instanciar um datagridview RRS feed

  • Pergunta

  • Ola, preciso criar um datagridview dinâmico onde o usuário informará o número de linhas e colunas que deseja no componente através de textbox. O problema é que não consigo instanciar o componente pelo código

     

                    DataGridView grid = new DataGridView();
                    grid.RowCount = 2;
                    grid.ColumnCount = 3;
                    grid.Location = new System.Drawing.Point(13, 47);

     

    Esse código é a parte onde eu instancio o datagridview, mas não funciona, não aparece nada no form.

    Como eu faço para instanciar o datagridview ?

     

    Valeu.

    quarta-feira, 12 de janeiro de 2011 01:02

Respostas

  • Oi J,

    O correto é voce adicionar ele dentro de um controle ja existente no html, como um asp:Panel por exemplo.

    Supondo que o ID do panel seja pnlGrid, para adicionar o grid dele você deve fazer o seguinte(apos o grid ser instanciado e com os atributos preenchidos):

    pnlGrid.Controls.Add(grid);

    Outra coisa é que para você visualizar seu grid, ele precisa ter algum registro, caso contrario ele nao vai aparecer mesmo. Se quiser incluir alguma mensagem quando o grid não ter registros, basta utilizar a propriedade EmptyDataText do grid.

    grid.EmptyDataText = "Nenhum registro encontrado.";


    ----------------------------
    Bruno Seixas
    Analista de Sistemas
    quarta-feira, 12 de janeiro de 2011 12:03
  • Bruno,

    Só complementando sua resposta, o Junior está utilizando Windows Forms (repare DataGridView e não GridView)... Então, só adicionar o controle no Form já resolve (mesmo ele estando sem registro algum)... É basicamente a mesma coisa que foi indicado pelo Bruno, mas, adicionando o DataGridView no próprio form:

    this.Controls.Add(grid);


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quarta-feira, 12 de janeiro de 2011 13:48
    Moderador
  • Junior,

    Isso é bem tranquilo de fazer... Você pode utilizar uma DataTable criada dinamicamente (número de linhas e colunas) para servir de DataSource da sua DataGridView (essa é uma das opções)... 

    Para fazer isso, suponha que você tenha dois TextBoxes (textQtdLinhas e textQtdColunas) na sua tela e um botão... E vamos supor que você já tenha a sua DataGridView vazia posicionada no seu form (suaDataGridView)... Declare um objeto do tipo DataTable no seu form, dando o nome de matriz e implemente o código do click do seu botão para criar as colunas e linhas da sua DataTable de acordo com o informado pelo usuário e utilize essa DataTable como fonte de dados da sua DataGridView... O código do seu form ficaria mais ou menos assim:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace SeuNameSpace
    {
      public partial class SeuForm : Form
      {
        private DataTable matriz;
    
        public SeuForm()
        {
          InitializeComponent();
        }
    
        private void btnCriaMatriz_Click(object sender, EventArgs e)
        {
          int qtdLinhas = Convert.ToInt32(textQtdLinhas.Text);
          int qtdColunas = Convert.ToInt32(textQtdColunas.Text);
    
          matriz = new DataTable();
    
          // Criando colunas da matriz...
          for (int contador = 0; contador < qtdColunas; contador++)
            matriz.Columns.Add(string.Format("coluna{0}", contador), typeof(double));
    
          // Criando linhas da matriz...
          for (int contador = 0; contador < qtdLinhas; contador++)
            matriz.Rows.Add(0);
    
          suaDataGridView.DataSource = null;
          suaDataGridView.DataSource = matriz;
        }
      }
    }
    
    

    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    sexta-feira, 14 de janeiro de 2011 11:21
    Moderador

Todas as Respostas

  • Oi J,

    O correto é voce adicionar ele dentro de um controle ja existente no html, como um asp:Panel por exemplo.

    Supondo que o ID do panel seja pnlGrid, para adicionar o grid dele você deve fazer o seguinte(apos o grid ser instanciado e com os atributos preenchidos):

    pnlGrid.Controls.Add(grid);

    Outra coisa é que para você visualizar seu grid, ele precisa ter algum registro, caso contrario ele nao vai aparecer mesmo. Se quiser incluir alguma mensagem quando o grid não ter registros, basta utilizar a propriedade EmptyDataText do grid.

    grid.EmptyDataText = "Nenhum registro encontrado.";


    ----------------------------
    Bruno Seixas
    Analista de Sistemas
    quarta-feira, 12 de janeiro de 2011 12:03
  • Bruno,

    Só complementando sua resposta, o Junior está utilizando Windows Forms (repare DataGridView e não GridView)... Então, só adicionar o controle no Form já resolve (mesmo ele estando sem registro algum)... É basicamente a mesma coisa que foi indicado pelo Bruno, mas, adicionando o DataGridView no próprio form:

    this.Controls.Add(grid);


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quarta-feira, 12 de janeiro de 2011 13:48
    Moderador
  • Obrigado pela resposta. Me ajudou um pouco mais.

    Na verdade estou tentando criar um programa para cálculo entre matrizes e achei que poderia fazer da seguinte maneira:

    O usuário preenche um text box com o tamanho da matriz, o sistema pega o número de linhas e colunas e cria um datagridview com o número de linhas e colunas informado pelo usuário.

    Algum de você poderia me informar sobre algum texto, artigo, etc que aborde sobre o assunto ? Matrizes usando windows forms em C#.

    Valeu.

    sexta-feira, 14 de janeiro de 2011 00:03
  • Junior,

    Isso é bem tranquilo de fazer... Você pode utilizar uma DataTable criada dinamicamente (número de linhas e colunas) para servir de DataSource da sua DataGridView (essa é uma das opções)... 

    Para fazer isso, suponha que você tenha dois TextBoxes (textQtdLinhas e textQtdColunas) na sua tela e um botão... E vamos supor que você já tenha a sua DataGridView vazia posicionada no seu form (suaDataGridView)... Declare um objeto do tipo DataTable no seu form, dando o nome de matriz e implemente o código do click do seu botão para criar as colunas e linhas da sua DataTable de acordo com o informado pelo usuário e utilize essa DataTable como fonte de dados da sua DataGridView... O código do seu form ficaria mais ou menos assim:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace SeuNameSpace
    {
      public partial class SeuForm : Form
      {
        private DataTable matriz;
    
        public SeuForm()
        {
          InitializeComponent();
        }
    
        private void btnCriaMatriz_Click(object sender, EventArgs e)
        {
          int qtdLinhas = Convert.ToInt32(textQtdLinhas.Text);
          int qtdColunas = Convert.ToInt32(textQtdColunas.Text);
    
          matriz = new DataTable();
    
          // Criando colunas da matriz...
          for (int contador = 0; contador < qtdColunas; contador++)
            matriz.Columns.Add(string.Format("coluna{0}", contador), typeof(double));
    
          // Criando linhas da matriz...
          for (int contador = 0; contador < qtdLinhas; contador++)
            matriz.Rows.Add(0);
    
          suaDataGridView.DataSource = null;
          suaDataGridView.DataSource = matriz;
        }
      }
    }
    
    

    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    sexta-feira, 14 de janeiro de 2011 11:21
    Moderador