C# DataGrid não atualiza

.NET

28/11/2011

Olá amigos,
estou com o seguinte problema:

tenho um formulario de atividades recentes.. os botões adicionar,alterar e excluir estão funcionando corretamente
porém, após efetuar sua ação, o dataGrid não atualiza. É necessário fechar o programa e abrir novamente para atualizar

estou usando Visual Studio 2010 C# + SQL Server. Se alguém poder ajudar fico agradecido!

Também gostaria de saber se é possível ordenar o Form2 para atualizar o dataGrid do Form1, no caso de criar um formulario exclusivamente para adicionar itens...se possível, como faço isso?

segue abaixo meu código do botão alterar que não atualiza o dataGrid:

 private void button2_Click(object sender, EventArgs e)
        {
            {

                try{
                

                    if (tbtitulo.Text != )
                    {

                        SqlConnection conn = new SqlConnection(@Data Source=PHOENIX\SQLEXPRESS;Initial Catalog=Ortifa;Integrated Security=True;Pooling=False);
                        SqlCommand comm = new SqlCommand();
                        comm.Connection = conn;
                        comm.CommandText = UPDATE Lembre SET Titulo =  + tbtitulo.Text + , Data =  + tbdata.Text + , Hora =  + tbhora.Text + WHERE Titulo =  + (tbtitulo.Text) + ;
// UPDATE cadcd set TIPO=-DIVERSOS, TITULO=TESTE1, DESCRICAO=TESTE1 where REGISTRO=007
                        comm.Parameters.AddWithValue(@TITULO, tbtitulo.Text);
                        comm.Parameters.AddWithValue(@DATA, tbdata.Text);
                        comm.Parameters.AddWithValue(@HORA, tbhora.Text);
                        comm.Parameters.AddWithValue(@LOCAL, tblocal.Text);
                        conn.Open();
                        comm.ExecuteNonQuery();
                        conn.Close();
                        MessageBox.Show(Midia alterada com sucesso!);
                    }

                    else
                    {
                        MessageBox.Show(Informe o código da mídia);
                    }

                }

                catch
                {
                    MessageBox.Show(Erro na alteração do cadastro, Mensagem do Sistema,
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

            }


Desde já agradeço pela atenção!
Dyego

Dyego

Curtidas 0

Respostas

Dyego

Dyego

28/11/2011

fulano
olá amigos,
estou com o seguinte problema:

tenho um formulario de atividades recentes.. os botões adicionar,alterar e excluir estão funcionando corretamente
porém, após efetuar sua ação, o datagrid não atualiza. é necessário fechar o programa e abrir novamente para atualizar

estou usando visual studio 2010 c# + sql server. se alguém poder ajudar fico agradecido!

também gostaria de saber se é possível ordenar o form2 para atualizar o datagrid do form1, no caso de criar um formulario exclusivamente para adicionar itens...se possível, como faço isso?

segue abaixo meu código do botão alterar que não atualiza o datagrid:


private void button2_click(object sender, eventargs e)
{
{

try{


if (tbtitulo.text != )
{

sqlconnection conn = new sqlconnection(@data source=phoenix\sqlexpress;initial catalog=ortifa;integrated security=true;pooling=false);
sqlcommand comm = new sqlcommand();
comm.connection = conn;
comm.commandtext = update lembre set titulo = + tbtitulo.text + , data = + tbdata.text + , hora = + tbhora.text + where titulo = + (tbtitulo.text) + ;
// update cadcd set tipo=-diversos, titulo=teste1, descricao=teste1 where registro=007
comm.parameters.addwithvalue(@titulo, tbtitulo.text);
comm.parameters.addwithvalue(@data, tbdata.text);
comm.parameters.addwithvalue(@hora, tbhora.text);
comm.parameters.addwithvalue(@local, tblocal.text);
conn.open();
comm.executenonquery();
conn.close();
messagebox.show(midia alterada com sucesso!);
}

else
{
messagebox.show(informe o código da mídia);
}

}

catch
{
messagebox.show(erro na alteração do cadastro, mensagem do sistema,
messageboxbuttons.ok, messageboxicon.warning);
}

}


desde já agradeço pela atenção!
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

Após adicionar o registro, você não pode implementar no mesmo método um outro método para atualizar seu datagrid?
GOSTEI 0
Dyego

Dyego

28/11/2011

Opa!
Então Rodrigo, eu tentei usar o data adapter de diversas formas, mas realmente não atualiza..

é necessário fechar o programa e abrir novamente para atualizar o dataGrid...

Eu vi em um tópico uma linha dizendo Grid.DataBind; mas aqui o visual não reconhece este comando, mesmo com todos using relacionados
Agradeço a atenção, e peço desculpas aos moderados pelo post duplo, sou novo no forum..
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

DataBind() você utiliza no ASP.NET para renderizar seu controle.
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

Tente assim:

TableAdapter.Fill(DataSet.Tabela);
GOSTEI 0
Dyego

Dyego

28/11/2011

Obrigado Rodrigo!

Testei o código aqui,mas infelizmente não rodou...
ele diz que não tem definição pra tabela entre parenteses, no caso:

ficou assim: lembreTableAdapter.Fill(DataSet.lembre);

a palavra lembre dentro de parenteses sublinhada em vermelho com o seguinte erro:

Error: System.Data.Dataset does not contain a definition for lembre
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

Se possível mostra o método que renderiza o DataGrid
GOSTEI 0
Dyego

Dyego

28/11/2011

Olá Rodrigo,
infelizmente sou novo ainda na área de C#, não saberia te dar tal informação
mas o único código que estou usando foi esse que postei, o que mostra no dataGrid é selecionado nele mesmo,sem codificação

ainda não consegui resolver o problema
GOSTEI 0
Flavia Santos

Flavia Santos

28/11/2011

Após o método de inserir, alterar ou excluir inclua o código abaixo, alterando o nome do método de pesquisa objPesquisa() e incluindo os parametros necessários:

GridView1.DataSource = objPesquisa();
GridView1.DataBind();

Onde ObjPesquisa() é o método que você já tem criado para popular o grid.


GOSTEI 0
Dyego

Dyego

28/11/2011

Não existe a propriedade DataBind no C# :/
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

DataBind é no ASP.NET
Você está em uma aplicação WindowsFormns né?
GOSTEI 0
Dyego

Dyego

28/11/2011

isso!

como disse, é um programa de atividades recentes..
ainda to na batalha pra resolver este problema! heheh
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

Solução:

Você precisa definir como nulo o seu datasource e depois popular ele.
Lembrando que a propriedade AutoGeneratiionColumn deve ficar como true, caso você não tenha mapeado as colunas.

private void button1_Click(object sender, EventArgs e)
{
var clientes = (List<Cliente>) dataGridView1.DataSource;
clientes.Add(new Cliente { Codigo = 4, Nome = Buscapé });

dataGridView1.DataSource = null;
dataGridView1.DataSource = clientes;
}
GOSTEI 0
Dyego

Dyego

28/11/2011

opa!

bela colocação rodrigo, eu já tinha tentado desta maneira mas não sabia do generation.. vou testar aqui e posto pra ver o que rolou. obrigado pela atenção meu camarada!
GOSTEI 0
Dyego

Dyego

28/11/2011

então rodrigo, não tem essa propriedade no dataGrid não...
eu to com o código que tava testando já de por em nulo o data source e depois reconectar
mas ele só poe nulo e não reconecta... estranho isso
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

Então na verdade DataGrid como coloquei de exemplo é o nome do Grid.
No caso você precisa substituir pelo seu.


Veja bem, você deve ter um método que é o Load do form certo?
Ou seja ao carregar será populado o seu Grid vindas da base do SQL.
Seu grid está ligado a algum DataSource.

Então no seu método incluir você precisa após a inclusão definir o DataSource do seu Grid como null e após isso setar o DataSource novamente.

Exemplo:

Grid.DataSource = null;
GridDataSource = AQUI você coloca seu DataSource;

Se você não conseguir posta o código do método Load do form que popula o seu Grid, assim vou poder ver e te mostrar.
Ou upa o projeto em algum site para download.


GOSTEI 0
Dyego

Dyego

28/11/2011

então amigo, meu código do botão excluir ficou assim:

private void button3_Click(object sender, EventArgs e)
{
string strcon = Data Source=PHOENIX\\SQLEXPRESS;Initial Catalog=Ortifa;Integrated Security=True;
string seltable = select * from Lembre;
string inserir = Delete From Lembre where Titulo = (+tbtitulo.Text+);
//and + tbdata.Text + )
SqlConnection conexao = new SqlConnection(strcon);
SqlDataAdapter da = new SqlDataAdapter(seltable, conexao);
DataSet ds = new DataSet();
SqlCommand cmdinsert = new SqlCommand(inserir, conexao);
conexao.Open();
cmdinsert.ExecuteNonQuery();
conexao.Close();
conexao.Open();
// GridLembre.DataSource = da.Fill(ds, seltable);

GridLembre.DataSource = null;
conexao.Close();
conexao.Open();
// da.Fill(ds);
this.lembreTableAdapter.Fill(this.ortifaDataSet.Lembre);

GridLembre.DataSource = seltable;

conexao.Close();

/* conexao.Open();
da.Fill(ds);
GridLembre.DataSource = lembreBindingSource2;

conexao.Close();

TableAdapter.Fill(DataSet.Tabela);
lembreTableAdapter.Fill(DataSet.lembre);
conexao.Close();
Form2 formu1 = new Form2();
this.Close();
Form2 formu2 = new Form2();
formu2.Show();
*/
tbtitulo.Text = ;





a linha this.lembreTableAdapter.Fill(this.ortifaDataSet.Lembre); é a única linha que está no meu Form_Load

ainda não está atualizando, mas aparece as linhas já, que antes não aparecia
se poder add msn: d5web@hotmail.com
GOSTEI 0
Dyego

Dyego

28/11/2011

Opa, pessoal
acabei de conseguir aqui...
creio que não seja da forma mais correta, mas pelo menos está atualizando
eu coloquei o dataset no datasource após a linha que popula o dataGrid entao ficou assim:

private void button3_Click(object sender, EventArgs e)
{
string strcon = Data Source=PHOENIX\\SQLEXPRESS;Initial Catalog=Ortifa;Integrated Security=True;
string seltable = select * from Lembre;
string inserir = Delete From Lembre where Titulo = (+tbtitulo.Text+);
//and + tbdata.Text + )
SqlConnection conexao = new SqlConnection(strcon);
SqlDataAdapter da = new SqlDataAdapter(seltable, conexao);
DataSet ds = new DataSet();
SqlCommand cmdinsert = new SqlCommand(inserir, conexao);
conexao.Open();
cmdinsert.ExecuteNonQuery();
conexao.Close();
conexao.Open();
// GridLembre.DataSource = da.Fill(ds, seltable);

GridLembre.DataSource = null;
conexao.Close();
conexao.Open();
// da.Fill(ds);
this.lembreTableAdapter.Fill(this.ortifaDataSet.Lembre);

GridLembre.DataSource = ortifaDataSet.Lembre;

conexao.Close();


agradeço a atenção de vcs!
até a próxima dúvida.. heheh
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

Isso, exatamente.

Após o GridLembre.DataSource = null;
Colocar novamente no DataSource sua fonte de dados.
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

Ah, não esqueça de fechar o tópico como resolvido.
GOSTEI 0
Dyego

Dyego

28/11/2011

entao, como faço isso? ;O
foi meu primeiro post, sou novo no forum
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

Boa pergunta! rs
Também não sei!

hehehe


Não uso MSN, só Skype
Se quiser add rodrigo.odasaki

Porém só trabalho na plataforma Web
GOSTEI 0
Flavia Santos

Flavia Santos

28/11/2011

Dyego,

Só uma duvida, seu grid está dentro de um update panel?
GOSTEI 0
Dyego

Dyego

28/11/2011

Update panel?

Não lembro de ter usado alguma ferramenta com este nome.

Apenas joguei o grid no formulário e selecionei meu data source
GOSTEI 0
Rodrigo Odasaki

Rodrigo Odasaki

28/11/2011

Flavia, novamente, ele está em uma aplicação Windows Forms e não Web Forms
GOSTEI 0
POSTAR