Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Tudo bom?
Nós temos um projeto, que é multiplataforma.
Muitas(Umas 6) pessoas acessam a mesma informação. Em plataformas diferentes (Web X Desktop X Mobile)
Como eu poderia atualizar em tempo real, ou quase, um datagridview, listview, etc...
Sendo ele populado por um Banco de Dados Mysql.
Poderia ser por Threads, Sockets ou WCF (Windows Communication Foundation).
Por favor pessoal.
Faltou isso para apresentar o projeto final.
Obrigado desde Já !
OBS: Já tentei um timer_tick, até que foi, o ruim é que o banco de dados não é local. Todos são direcionados a um servidor.
E imagine dois timers em uma form, consultando o BD.
OBS²: SignalR? Alguém ? rs
Olá !
Tudo bom ?
Obrigado pela resposta.
Então, segue parte do código da thread chamando os métodos de preencher o Listview e DatagridView da minha form.
public Caixa2()
{
InitializeComponent();
ChamarThread();
}
public void ChamarThread()
{
System.Threading.ThreadStart ts =
new System.Threading.ThreadStart(ExecutarThread);
System.Threading.Thread t =
new System.Threading.Thread(ts);
t.IsBackground = true;
t.Start();
}
private void ExecutarThread()
{
conta.PreencherListView(lblNumeroConta.Text, listView1);
caixa.PreencherDatraGridViewDelivery(dGridViewDelivery);
}
E abaixo segue códigos dos dois métodos:
Preencher listView
public ListView PreencherListView(string numeroConta, ListView listview1)
{
ListView result = new ListView();
try
{
if (Banco.conectar_no_banco("banco"))
{
_listview1 = listview1;
_numeroConta = numeroConta;
MySqlDataAdapter da = new MySqlDataAdapter();
MySqlCommand cmd = new MySqlCommand("SELECT nome, preco, count(produtos.nome) as qntd FROM pedidos, produtos_has_pedidos, produtos where (conta_idconta = ?conta_idconta and Pedidos_idpedidos = idpedidos and produtos_idprodutos = idprodutos ) group by nome", CLS.Banco.conexao);
Banco.comando.Parameters.AddWithValue("conta_idconta", numeroConta);
Banco.adapter.SelectCommand = cmd;
Banco.mDataSet = new DataSet();
Banco.mDataSet.Clear();
Banco.adapter.Fill(Banco.mDataSet, "pedidos");
DataTable dtable = Banco.mDataSet.Tables["pedidos"];
listview1.Items.Clear();
for (int i = 0; i < dtable.Rows.Count; i++)
{
DataRow drow = dtable.Rows[i];
if (drow.RowState != DataRowState.Deleted)
{
ListViewItem lvi = new ListViewItem(drow["count(produtos.nome)"].ToString());
lvi.SubItems.Add(drow["nome"].ToString());
lvi.SubItems.Add(drow["preco"].ToString());
listview1.Items.Add(lvi);
}
}
result = null;
}
else
{
Banco.Fecha_banco("banco");
result = null;
}
}
catch (Exception ex)
{
string x = ex.Message;
result = null;
}
return result;
}
Código do método de preencher o DatagridView:
public DataTable PreencherDatraGridViewDelivery(DataGridView datagridview)
{
DataTable result = new DataTable();
try
{
if (Banco.conectar_no_banco("banco"))
{
_categoriaProduto = categoriaProduto;
_datagridview = datagridview;
Banco.comando = new MySqlCommand("SELECT idPedidos as id, nomeCliente as Cliente, nome as Sabor, tamanho as Tamanho FROM pedidos, produtos_has_pedidos, produtos where ( Pedidos_idpedidos = idpedidos and produtos_idprodutos = idprodutos ) group by nome;", Banco.conexao);
Banco.adapter.SelectCommand = Banco.comando;
Banco.mDataSet.Clear();
Banco.adapter.Fill(Banco.mDataSet, "IdPedidos");
datagridview.DataSource = Banco.mDataSet;
datagridview.DataMember = "IdPedidos";
}
else
{
Banco.Fecha_banco("banco");
result = null;
}
}
catch (Exception ex)
{
string x = ex.Message;
result = null;
}
return result;
}Ok, e ai?
Olá !
Desculpe, eu postei rapidamente, pois no curso eles cortam a internet sem avisar...
Então, eu vou manualmente inserir coisas na tabela que dou select, conforme código acima. Não acontece nada... É como se o método de buscar não estivesse rodando...
Mas primeiramente, o que você está tentando fazer?
Desculpe,
Segue print da minha form :
/applications/core/interface/imageproxy/imageproxy.php?img=http://s30.postimg.org/nn3dbvjg1/Sem_t_tulo.png&key=1b17433ad15730d780202ea81cceeb43b212550d00492b4b9252fd0eb7bfdc1d" alt="Sem_t_tulo.png" />
Eu quero atualizar em tempo real as datagridviews e listviews de minha form.
Use o timer para iniciar uma thread ou um background worker, e essa thread ou bgw vai fazer o processo de selecionar no banco e atualizar a grid.
Procure por backgroundWorker no google.
Olá !
Então...
Eu chamei esse método "chamarThread" por um timer, mas não funcionou... O Sistema trava. E estou programando em um servidor HP de 16GB...
Obrigado !
O que pode ser ?!, a forma que eu busco no banco ?!
Se o seu timer tiver um tempo muito curto sim, ele vai travar. O ideal é você chamar em processos separados talvez de 10 em 10 segundos ou menos. Tente executar uma só vez o método e ver se ele trava.
Se você está usando o windows forms, basta iniciar uma thread em segundo plano e preencher a propriedade dataSource com o dataSet retornado dos dados. A atualização é automática.