Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DaniloTec

Pegar valor do DropDownList no evento RowUpdating.

Recommended Posts

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.