Array
(
)

C# DataGrid não atualiza

Dyego
   - 28 nov 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:
#Código
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
   - 28 nov 2011


Citação:
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!

Rodrigo Odasaki
   - 28 nov 2011

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

Dyego
   - 28 nov 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..

Rodrigo Odasaki
   - 28 nov 2011

DataBind() você utiliza no ASP.NET para renderizar seu controle.

Rodrigo Odasaki
   - 28 nov 2011

Tente assim:

TableAdapter.Fill(DataSet.Tabela);

Dyego
   - 28 nov 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

Rodrigo Odasaki
   - 28 nov 2011

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

Dyego
   - 29 nov 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

Flavix
   - 01 dez 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.

Dyego
   - 01 dez 2011

Não existe a propriedade DataBind no C# :/

Rodrigo Odasaki
   - 01 dez 2011

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

Dyego
   - 01 dez 2011

isso!

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

Rodrigo Odasaki
   - 02 dez 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;
}

Dyego
   - 02 dez 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!

Dyego
   - 02 dez 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

Rodrigo Odasaki
   - 03 dez 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.

Dyego
   - 03 dez 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

Dyego
   - 03 dez 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

Rodrigo Odasaki
   - 03 dez 2011

Isso, exatamente.

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

Rodrigo Odasaki
   - 03 dez 2011

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