Array
(
)

Trabalhando com dois gridview

Jorge Meneses
   - 08 ago 2013

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();
}

Joel Rodrigues
   - 08 ago 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:
#Código

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();
}

Jorge Meneses
   - 08 ago 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 Rodrigues
   - 08 ago 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.

Jorge Meneses
   - 08 ago 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...

Joel Rodrigues
   - 09 ago 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.