Trabalhando com dois gridview
Olá
preciso fazer uma pesquisa que preencha o gridview1, ate ai funcionando
apos a pesquisa selecionar no gridview1 o que eu quero passar pro gridview2, ai que da o problema
ja tentei usar arraylist e table mas nao consegue nao conheco direito os objetos entao segue o codigo que estou tentando
a falha é que ele limpa o grid e larga apenas a ultima selecao, nao consigo ir acrescentando registro a regristro no grdview2
protected void btnadd_Click(object sender, EventArgs e)
{
FbConnection Conn = new FbConnection(@"Server=localhost;User=SYSDBA;Password=PhillerKey;Database=camus:D:\Softclin\banco\softclin.sof");
Conn.Open();
DataSet ds = new DataSet();
foreach (GridViewRow gvr in this.GridView1.Rows)
{
bool check = (gvr.FindControl("CheckBox1") as CheckBox).Checked;
if (check == true)
{
int codigo = Convert.ToInt32(gvr.Cells[1].Text);
FbDataAdapter ad = new FbDataAdapter("select cad_codigo codigo,cad_nome titular from cadastro where cad_codigo = " + codigo +" ", Conn);
ad.Fill(ds, "piloto");
}
}
GridView2.DataSource = ds;
GridView2.DataBind();
Conn.Close();
}
preciso fazer uma pesquisa que preencha o gridview1, ate ai funcionando
apos a pesquisa selecionar no gridview1 o que eu quero passar pro gridview2, ai que da o problema
ja tentei usar arraylist e table mas nao consegue nao conheco direito os objetos entao segue o codigo que estou tentando
a falha é que ele limpa o grid e larga apenas a ultima selecao, nao consigo ir acrescentando registro a regristro no grdview2
protected void btnadd_Click(object sender, EventArgs e)
{
FbConnection Conn = new FbConnection(@"Server=localhost;User=SYSDBA;Password=PhillerKey;Database=camus:D:\Softclin\banco\softclin.sof");
Conn.Open();
DataSet ds = new DataSet();
foreach (GridViewRow gvr in this.GridView1.Rows)
{
bool check = (gvr.FindControl("CheckBox1") as CheckBox).Checked;
if (check == true)
{
int codigo = Convert.ToInt32(gvr.Cells[1].Text);
FbDataAdapter ad = new FbDataAdapter("select cad_codigo codigo,cad_nome titular from cadastro where cad_codigo = " + codigo +" ", Conn);
ad.Fill(ds, "piloto");
}
}
GridView2.DataSource = ds;
GridView2.DataBind();
Conn.Close();
}
Jorge Meneses
Curtidas 0
Respostas
Joel Rodrigues
08/08/2013
Neste caso você precisa usar o operador IN para filtrar os registros cujo código se encontram em uma lista. Creio que ficaria assim:
protected void btnadd_Click(object sender, EventArgs e) { FbConnection Conn = new FbConnection(@"Server=localhost;User=SYSDBA;Password=PhillerKey;Database=camus:D:\Softclin\banco\softclin.sof"); Conn.Open(); DataSet ds = new DataSet(); foreach (GridViewRow gvr in this.GridView1.Rows) { bool check = (gvr.FindControl("CheckBox1") as CheckBox).Checked; string codigos = ""; if (check == true) { int codigo = Convert.ToInt32(gvr.Cells[1].Text); codigos += "'"+codigo.ToString()+"',"; } } codigos = codigos.Substring(codigos.Length - 1, 1); FbDataAdapter ad = new FbDataAdapter("select cad_codigo codigo,cad_nome titular from cadastro where cad_codigo in (" + codigos +")", Conn); ad.Fill(ds, "piloto"); GridView2.DataSource = ds; GridView2.DataBind(); Conn.Close(); }
GOSTEI 0
Jorge Meneses
08/08/2013
Olá
Joel nao deu certo, pelo que vi teu exemplo daria o mesmo resultado que eu ja tinha antes, acredito que derrepente nao deve ter conseguido explicar oq quero
no exemplo abaixo acredito que esta correto, o problema é que cada que clico no botao ele limpa e comeca denovo
e gostaria de ir adicionando sem perder oq ja add antes
protected void btnadd_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
DataRow dr = dt.NewRow();
FbConnection Conn = new FbConnection(@"Server=localhost;User=SYSDBA;Password=PhillerKey;Database=camus:D:\Softclin\banco\softclin.sof");
Conn.Open();
foreach (GridViewRow gvr in this.GridView1.Rows)
{
bool check = (gvr.FindControl("CheckBox1") as CheckBox).Checked;
if (check == true)
{
int codigo = Convert.ToInt32(gvr.Cells[1].Text);
FbDataAdapter da = new FbDataAdapter("select cad_codigo codigo,cad_nome titular from cadastro where cad_codigo = " + codigo + " ",Conn);
da.Fill(dt);
}
}
GridView2.DataSource = dt;
GridView2.DataBind();
Conn.Close();
}
Joel nao deu certo, pelo que vi teu exemplo daria o mesmo resultado que eu ja tinha antes, acredito que derrepente nao deve ter conseguido explicar oq quero
no exemplo abaixo acredito que esta correto, o problema é que cada que clico no botao ele limpa e comeca denovo
e gostaria de ir adicionando sem perder oq ja add antes
protected void btnadd_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
DataRow dr = dt.NewRow();
FbConnection Conn = new FbConnection(@"Server=localhost;User=SYSDBA;Password=PhillerKey;Database=camus:D:\Softclin\banco\softclin.sof");
Conn.Open();
foreach (GridViewRow gvr in this.GridView1.Rows)
{
bool check = (gvr.FindControl("CheckBox1") as CheckBox).Checked;
if (check == true)
{
int codigo = Convert.ToInt32(gvr.Cells[1].Text);
FbDataAdapter da = new FbDataAdapter("select cad_codigo codigo,cad_nome titular from cadastro where cad_codigo = " + codigo + " ",Conn);
da.Fill(dt);
}
}
GridView2.DataSource = dt;
GridView2.DataBind();
Conn.Close();
}
GOSTEI 0
Joel Rodrigues
08/08/2013
Veja só: em cada iteração do foreach você está fazendo um filtro pelo código da linha selecionada, ou seja, você está fazendo um filtro por código a cada vez. No fim, você só preenche com o último código selecionado, então não estão sendo exibidos os dados correspondentes a todos os itens marcados no grid1, mas sim apenas os que correspondem ao último registro.
Observação: por favor use as tags de formatação para organizar seu código.
Observação: por favor use as tags de formatação para organizar seu código.
GOSTEI 0
Jorge Meneses
08/08/2013
sim mas se eu marco 3 registros no grid1, eles carregam certo no grid2
mas se eu carregar novamente grid1 com nova pesquisa quando mando pro grid 2 dai ele carrega apenas os novos selecionado, nao mantendo os 3 carregados anteriormente
ja tentei colocar o datatable antes do preload da pagina, mas é como se ao dar postback ele limpasse pra comecar do zero denovo
nao sei se entende...
mas se eu carregar novamente grid1 com nova pesquisa quando mando pro grid 2 dai ele carrega apenas os novos selecionado, nao mantendo os 3 carregados anteriormente
ja tentei colocar o datatable antes do preload da pagina, mas é como se ao dar postback ele limpasse pra comecar do zero denovo
nao sei se entende...
GOSTEI 0
Joel Rodrigues
08/08/2013
Nesse caso você teria que manter uma tabela interna e ir adicionando linhas nela, pois toda vez que você renovar os dados do grid1, os do grid2 serão limpos e atualizados de acordo com os novos dados do grid1. Se você quer ir acumulando, precisaria de uma tabela para ir juntando tudo e exibindo no grid2.
GOSTEI 0