DaniloTec 0 Denunciar post Postado Setembro 9, 2009 Bom dia gente. Já faz uns 5 dias que estou tentando resolver isso e não estou conseguindo. Fiz um grid que é populado com o resultado de uma query: <asp:GridView ID="gvGenero" runat="server" AutoGenerateColumns="False" onrowcancelingedit="gvGenero_RowCancelingEdit" onrowdatabound="gvGenero_RowDataBound" onrowediting="gvGenero_RowEditing" onrowupdating="gvGenero_RowUpdating"> <Columns> <asp:BoundField DataField="idGenero" HeaderText="Cod." ReadOnly="True" /> <asp:BoundField DataField="bitAtivo" HeaderText="Status" /> <asp:BoundField DataField="strNomeGenero" HeaderText="Gênero" /> <asp:BoundField DataField="dtInclusao" HeaderText="Data de Inclusão" ReadOnly="True" /> <asp:BoundField DataField="strNomeUsuario" HeaderText="Incluído Por" ReadOnly="True" /> <asp:CommandField CancelText="Cancelar" EditText="Editar" ShowEditButton="True" UpdateText="Atualizar" ButtonType="Button" /> </Columns> </asp:GridView> E no evento RowUpdating estou tentando resgatar o valor de um DropDownList que coloquei no evento RowEditing: protected void gvGenero_RowEditing(object sender, GridViewEditEventArgs e) { Formulario objForm = new Formulario(); string status = gvGenero.Rows[e.NewEditIndex].Cells[1].Text; //ADICIONA O DDL DE STATUS DropDownList ddlStatus = new DropDownList(); ddlStatus.ID = "ddlStatus"; ddlStatus.DataSource = objForm.ddlStatus(); ddlStatus.DataBind(); ddlStatus.SelectedValue = status; gvGenero.EditIndex = e.NewEditIndex; BindGenero(); gvGenero.Rows[e.NewEditIndex].Cells[1].Controls.Add(ddlStatus); } protected void gvGenero_RowUpdating(object sender, GridViewUpdateEventArgs e) { string strGenero = ((TextBox)gvGenero.Rows[e.RowIndex].Cells[2].Controls[0]).Text; int idGenero = Convert.ToInt32(gvGenero.Rows[e.RowIndex].Cells[0].Text); string strStatus = ((DropDownList)gvGenero.Rows[e.RowIndex].Cells[1].Controls[0]).SelectedValue.ToString(); //ALERTA DE TESTE ClientScript.RegisterClientScriptBlock(GetType(), "Alerta", "<script>alert('" + strStatus + "');</script>"); Genero objGenero = new Genero(); objGenero.AtualizaGenero(idGenero,strStatus,strGenero); gvGenero.EditIndex = -1; BindGenero(); } Mas exibe o seguinte erro: "Object reference not set to an instance of an object." Não consigo resolver isso. Poderiam me ajudar? :) Vlw! Compartilhar este post Link para o post Compartilhar em outros sites
Cega86 0 Denunciar post Postado Setembro 9, 2009 Danilo, Tentar pegar o valor do dropdownlist usando a propriedade FindControl assim: DropDownList teste = (DropDownList)gvGenero.Rows[e.RowIndex].Cells[1].FindControl("o nome do seu dropDownlist"); string produto = teste.SelectedItem.ToString(); Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Setembro 9, 2009 Já tentei isso tmb e não deu certo. O erro é o mesmo. Ele não encontra o DropDownList, mas encontra um controle do tipo TextBox. Mas de onde veio este TextBox eu também não sei. http://forum.imasters.com.br/public/style_emoticons/default/upset.gif Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Setembro 9, 2009 Veja quais são os controles que estão aqui dentro: gvGenero.Rows[e.RowIndex].Cells[1] Veja se algum deles é do tipo DropDownList. Abraços.. Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Setembro 9, 2009 Obrigado Quintelab, mas como eu faço isso? :) Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Setembro 10, 2009 Estou começando a acreditar que este problema não tem solução. Já faz quase duas semanas que tempo resolver isso e não consigo. Já falei com meio mundo e ninguém descobre tmb. Se eu não conseguir resolver isso vou ter que acabar optando pela boa e velha table mesmo, rs. Compartilhar este post Link para o post Compartilhar em outros sites
Cega86 0 Denunciar post Postado Setembro 10, 2009 Danilo, você ja colocou um break poit nessa linha que o quintelab disse e verificou oq está recebendo? outra coisa essa variável strStatus deveria ser do tipo dropDownList e depois você declaria uma variavel string recebendo o strStatus.value: DropDownList strStatus = (DropDownList)gvGenero.Rows[e.RowIndex].Cells[1].FindControl("o nome do seu dropDownlist"); string produto = strStatus.SelectedItem.ToString(); tenho em um projeto com a mesma situação e funciona perfeitamente com esse código. Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Setembro 11, 2009 Bom dia Cega. Eu já tinha tentado isso tmb e não funcionou. Vou postar meu código inteiro pra você ver o que pode estar acontecendo. C# using System; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using MySql.Data.MySqlClient; public partial class _Default : System.Web.UI.Page { MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindGrid(); } } protected void BindGrid() { MySqlDataAdapter daGrid = new MySqlDataAdapter(); daGrid.SelectCommand = new MySqlCommand("select * from tbGenero order by strNomeGenero",conn); DataSet dsGrid = new DataSet(); daGrid.Fill(dsGrid); gv.DataSource = dsGrid; gv.DataBind(); } protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { if (e.Row.Cells[1].Text == "1") { e.Row.Cells[1].Text = "Ativo"; } else { e.Row.Cells[1].Text = "Inativo"; } e.Row.Cells[3].Text = Convert.ToDateTime(e.Row.Cells[3].Text).ToShortDateString(); } } protected void gv_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { gv.EditIndex = -1; BindGrid(); } protected void gv_RowEditing(object sender, GridViewEditEventArgs e) { string status = gv.Rows[e.NewEditIndex].Cells[1].Text; int bitAtivo = 0; if (status != "Ativo") { bitAtivo = 1; } else { bitAtivo = 0; } gv.EditIndex = e.NewEditIndex; BindGrid(); //ADICIONA O DDL DE STATUS DropDownList ddlStatus = new DropDownList(); ddlStatus.ID = "ddlStatusGenero"; ddlStatus.Items.Insert(0, new ListItem("Ativo", "1")); ddlStatus.Items.Insert(1, new ListItem("Inativo", "0")); ddlStatus.SelectedIndex = bitAtivo; gv.Rows[e.NewEditIndex].Cells[1].Controls.Add(ddlStatus); } protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e) { DropDownList strStatus = (DropDownList)gv.Rows[e.RowIndex].Cells[1].FindControl("ddlStatusGenero"); string strGenero = strStatus.SelectedItem.ToString(); ClientScript.RegisterClientScriptBlock(GetType(), "alert", "<script>alert('" + strGenero + "');</script>"); gv.EditIndex = -1; BindGrid(); } } ASPX <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" onrowcancelingedit="gv_RowCancelingEdit" onrowdatabound="gv_RowDataBound" onrowediting="gv_RowEditing" onrowupdating="gv_RowUpdating"> <Columns> <asp:BoundField DataField="idGenero" HeaderText="Cod." ReadOnly="True" /> <asp:BoundField DataField="bitAtivo" HeaderText="Status" /> <asp:BoundField DataField="strNomeGenero" HeaderText="Gênero" /> <asp:BoundField DataField="dtInclusao" HeaderText="Data" ReadOnly="True" /> <asp:CommandField ButtonType="Button" CancelText="Cancelar" EditText="Editar" ShowEditButton="True" UpdateText="Atualizar" /> </Columns> </asp:GridView> </div> </form> </body> </html> Já tentei muita coisa, mas nenhuma delas funcionou. Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Setembro 11, 2009 Obrigado Quintelab, mas como eu faço isso? :) Coloque um break no seu código e quando estiver debugando, utilize o Immediate Window colando: gvGenero.Rows[e.RowIndex].Cells[1] Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Setembro 14, 2009 Bom dia Quintelab. Fiz o que você falou e retornou o seguinte resultado: gv.Rows[e.RowIndex].Cells[1] {System.Web.UI.WebControls.DataControlFieldCell} [system.Web.UI.WebControls.DataControlFieldCell]: {System.Web.UI.WebControls.DataControlFieldCell} base {System.Web.UI.WebControls.WebControl}: {System.Web.UI.WebControls.DataControlFieldCell} AssociatedHeaderCellID: {string[0]} ColumnSpan: 0 HorizontalAlign: NotSet RowSpan: 0 Text: "Inativo" VerticalAlign: NotSet Wrap: true Pelo o que eu puder ver, ele não encontrou nada relacionado com o DropDownList.Mas quando entra em modo de edição o DropDownList aparece pra selecionar o valor. Compartilhar este post Link para o post Compartilhar em outros sites