Array
(
)

Problema com GridView No servidor de produção

Carlos Andre
   - 29 jul 2011

Ola ,

Estou com um problema na gridview somente no servidor de produçao. Quando executo em minha maquina funciona corretamente.

Eu populo uma gridview via codigo conforme abaixo:

Evento click de um botao.

aqui faço uma query  Session("sql") = "select a.idagenda,c.nometarefa,a.descricao,b.nome,d.dataabertura,d.datafim  from sigla.agenda...."                    

aqui eu passo para o datasource q esta associado ao grid, a query criada acima.   SqlDataSource1.SelectCommand = Session("sql")
                SqlDataSource1.DataBind()

                GridView1.DataBind()

Coloquei a grid para habilitar seleção. e no evento GridView1_SelectedIndexChanged faço o codigo abaixo.

Dim row As String = GridView1.SelectedRow.Cells(1).Text

Fazendo isso em minha maquina funcionou corretamente, a row recebe um numero qualquer .

Quando executo no servidor de produçao ocorre o erro a seguir

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

É como se nao existisse aquela coluna, so que aparece na grid td certinho, a linha e o botão para selecionar e quando clico da este erro.

Ja tentei de td, peço a ajuda de vcs para me ajudar a resolver este problema.

Sds,

Hernane Goncalves
   - 30 jul 2011

Voce precisa colocar o DataKeyNames no gridview.

caso tenha colocado, verifique a sua tabela no banco, e veja se sua coluna de identificação (ID), está configurada corretamente.   pois ele nao esta conseguindo pegar o ID da linha quando voce clica no select.   pois o select, antes de selecionar a linha no gridview, ele capitura a ID da coluna através do DataKeyNames

Carlos Andre
   - 01 ago 2011

Ola hernane,
coloquei um datakeyname e fiz deste jeito txtagenda.Text = GridView1.SelectedDataKey(0).Text
e da este problema :

Object reference not set to an instance of an object.


O estranho eh q se eu passar o sql sem ser via codigo para o datasource funciona, mas quando passo o sql via codigo mostra as linhas mas nao pega nada do campo.

Hernane Goncalves
   - 01 ago 2011

Vamos a mais detalhes, quando voce colocar o datakeyname   adicione o evendo SelectedIndexChanged no seu GridView, dentro dele e crie uma valiável que vai pegar o ID assim que voce clicar no select.   lembrando que voce terá que ter um botão com o Command "Select" para clicar, pois quando voce clicar nele, ele aciona o evento que segue abaixo.     o seu código terá que ficar como segue o modelo abaixo.     protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)

{

Int IDAlbumIMG = (Int32)GridView1.SelectedDataKey.Value;   txtagenda.Text = IDAlbumIMG.TotString();   // Nesse exemplo eu estou usando uma Indentificacão de numeros Inteiros, ae voce coloca a que voce esta usando ai       }   dessa forma ele vai enviar a ID para seu txtagenda.Text, Lembrando que seu txtagenda.Text nao pode estar dentor do GridView ou dentro de qualquer outro controle, pois dessa forma Utilizaremos o Evendo   RowDataBound   qualque duvida posta todo o seu código aqui

Carlos Andre
   - 01 ago 2011

Ola Hernane,
Descobri o problema, estava dando problema pq estava utilizando uma image na gridview para selecionar. Troquei de image para link e funcionou corretamente. Nao sei se eh bug ou outra coisa. Queria que ficasse com image, estava mais bonito mas se so funciona link entao usarei link msm.
Sabe pq isso ocorre?
sds,

Hernane Goncalves
   - 03 ago 2011

utilize dessa forma     <hyperlink id="" navigateurl="">  <image id="" imgeurl=""></image>  </hyperlink>     coloca a umagem dentro do link, pois dessa forma voce tem o link que vai torna seu botao funcional e com a imagem que voce quiser

Hernane Goncalves
   - 03 ago 2011

utilize dessa forma     <hyperlink id="" navigateurl="">  <image id="" imgeurl=""></image>  </hyperlink>     coloca a umagem dentro do link, pois dessa forma voce tem o link que vai torna seu botao funcional e com a imagem que voce quiser