He tenido más problemas para encontrar el valor de una casilla de verificación. He buscado en todas partes y parece que no puedo obtener el valor correcto, no aparece nada o obtengo un error de referencia NULL. He comprobado los otros hilos / publicaciones y ninguno parece funcionar.

Todo lo que intento hacer es obtener el valor de una casilla de verificación, pero parece que no puedo hacer eso.

La información proviene de una base de datos. Puedo tomar el valor de la cadena pero no puedo tomar el valor de la casilla de verificación.

De todos modos, este es el código que utilicé para obtener el valor de la cadena y el valor de la casilla de verificación:

//String grabber    
Convert.ToString(gvOrders.SelectedRow.Cells[2].Text);

//Checkbox grabber
Boolean.TryParse(gvOrders.SelectedRow.Cells[11].Text, out bool pep);

O

//Checkbox grabber
Convert.ToBoolean(gvOrders.SelectedRow.Cells[2].Text);

De todos modos, por favor, nada de negatividad, he estado luchando por encontrar el valor y simplemente no está funcionando.

Gracias de antemano.

Editar:

CÓDIGO AÑADIDO:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Convert.ToString(Session["username"]) != "Scott" || Convert.ToString(Session["perms"]) != "admin")
        {
            Response.Redirect("Default.aspx");
        }
        GuestOrderInfo temp = new GuestOrderInfo();
        gvOrders.DataSource = temp.SearchAll();
        gvOrders.DataBind();
    }

    protected void osicOrders(object sender, EventArgs e)
    {
        Int16 row = Convert.ToInt16(gvOrders.SelectedRow.Cells[1].Text);
        Session["row"] = row;
        //Convert to a session to use in a different function.
        Session["fName"] = Convert.ToString(gvOrders.SelectedRow.Cells[2].Text);
        Session["lName"] = Convert.ToString(gvOrders.SelectedRow.Cells[3].Text);
        Session["street"] = Convert.ToString(gvOrders.SelectedRow.Cells[4].Text);
        Session["street2"] = Convert.ToString(gvOrders.SelectedRow.Cells[5].Text);
        Session["city"] = Convert.ToString(gvOrders.SelectedRow.Cells[6].Text);
        Session["state"] = Convert.ToString(gvOrders.SelectedRow.Cells[7].Text);
        Session["zip"] = Convert.ToString(gvOrders.SelectedRow.Cells[8].Text);
        Session["price"] = Convert.ToDouble(gvOrders.SelectedRow.Cells[9].Text);
        Session["size"] = Convert.ToString(gvOrders.SelectedRow.Cells[10].Text);


        Session["pepperoni"] = Boolean.TryParse(gvOrders.SelectedRow.Cells[11].Text, out bool pep);
        Session["sausage"] = Boolean.TryParse(gvOrders.SelectedRow.Cells[12].Text, out bool sau);
        Session["meatball"] = Boolean.TryParse(gvOrders.SelectedRow.Cells[13].Text, out bool mea);
        Session["ham"] = Boolean.TryParse(gvOrders.SelectedRow.Cells[14].Text, out bool hamm);
        Session["peppers"] = Boolean.TryParse(gvOrders.SelectedRow.Cells[15].Text, out bool pepp);
        Session["onions"] = Boolean.TryParse(gvOrders.SelectedRow.Cells[16].Text, out bool onio);
        Session["spinach"] = Boolean.TryParse(gvOrders.SelectedRow.Cells[17].Text, out bool spin);
        Session["pineapple"] = Boolean.TryParse(gvOrders.SelectedRow.Cells[18].Text, out bool pine);
        Session["bbq"] = Boolean.TryParse(gvOrders.SelectedRow.Cells[19].Text, out bool bbqq);
        Session["xcheese"] = Boolean.TryParse(gvOrders.SelectedRow.Cells[20].Text, out bool xch);


        //
        //
        //FIND OUT HOW TO GET THE VALUE OF A CHECKBOX IN GV AND USE THAT VALUE WITHIN SESSION VARIABLES TO UPDATE DATA IN THE UPDATE PAGE THEN MAKE A SEARCH PAGS
        //
        //
        CheckBox cb = (CheckBox)gvOrders.SelectedRow.Cells[11].FindControl("pepperoni");




        selectedID.Text = "Selected: " + Convert.ToString(row);
        selectedInformation.Text = Session["fName"] + " " + Session["lName"] + " Pepp = " + cb.Checked;
        edit.Visible = true;
        delete.Visible = true;
        selectedInformation.Visible = true;
        cancel.Visible = true;
    }


    protected void delete_OnClick(object sender, EventArgs e)
    {
        string buttonText = (sender as LinkButton).Text;


        if (buttonText == "Delete")
        {
            edit.Visible = false;
            delete.Visible = false;
            yes.Visible = true;
            no.Visible = true;
            sure.Visible = true;

        }
        if (buttonText == "Edit")
        {
            Response.Redirect("editOrders.aspx");
        }
        if (buttonText == "Yes")
        {
            GuestOrderInfo temp = new GuestOrderInfo();

            temp.DeleteARecord(Convert.ToInt16(Session["row"]));
            Session.Remove("row");
            Response.Redirect("viewOrders.aspx");
        }
        if (buttonText == "No")
        {
            edit.Visible = true;
            delete.Visible = true;
            yes.Visible = false;
            no.Visible = false;
            sure.Visible = false;
        }
        if (buttonText == "Cancel")
        {
            Response.Redirect("viewOrders.aspx");

        }





    }
}

HTML ORIGINAL:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="viewOrders.aspx.cs" Inherits="Default2" %>

<asp:Content ID="Content1" ContentPlaceHolderID="title" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="BodyContent" Runat="Server">
    <asp:GridView ID="gvOrders" runat="server" OnSelectedIndexChanged="osicOrders" AutoGenerateSelectButton="True" >
    </asp:GridView>
    <asp:Label runat="server" ID="selectedID"></asp:Label>
    <asp:Label runat="server" ID="selectedInformation" Visible="False"/>
    <asp:LinkButton runat="server" ID="edit" Text="Edit" OnClick="delete_OnClick" Visible="False"/>  <asp:LinkButton runat="server" ID="delete" Text="Delete" Visible="False" OnClick="delete_OnClick"/><asp:LinkButton runat="server" ID="cancel" Text="Cancel" Visible="False" OnClick="delete_OnClick"/><br/>
    <asp:Label runat="server" Text="Are you sure you want to do this?" ID="sure" Visible="False"></asp:Label><br/>

    <asp:LinkButton runat="server" Visible="False" ID="no" Text="No" OnClick="delete_OnClick"/> <asp:LinkButton runat="server" Visible="False" ID="yes" Text="Yes" OnClick="delete_OnClick"/>



    <!-- Make the edit button work along with the delete -->
    <!-- Data validation, design and submit  :^) -->
</asp:Content>
0
Bellucheese 13 nov. 2017 a las 04:01

2 respuestas

La mejor respuesta

No está claro qué valor desea devolver del CheckBox. ¿Desea obtener la etiqueta de casilla de verificación o el estado de selección?

De todos modos, en lugar de intentar obtener el contenido de la celda directamente, creo que debería encontrar el control de casilla de verificación como este.

CheckBox cb = (CheckBox)gvOrders.SelectedRow.Cells[2].FindControl("checkboxID");
string checkboxtext = cb.Text; //Gives you the text of the checkbox
bool IsCheckboxChecked = cb.Checked; // Gives you the selection status of the checkbox.

¿Es esto lo que buscas?

Editar: puedo ver que no ha especificado la propiedad GridView.AutoGenerateColumns, lo que significa que tiene el valor predeterminado verdadero. Lo que eso significa es que el diseño de las columnas lo deciden los datos que están vinculados a la vista de cuadrícula. Esto puede causar problemas durante la depuración, ya que el índice de celda que está proporcionando puede cambiar dependiendo de los datos devueltos por el lector de datos. Le aconsejaría que establezca AutoGenerateColumns en false y especifique manualmente el diseño que desee.

Puede ver un ejemplo aquí

0
Mohamed Najiullah 13 nov. 2017 a las 05:54

Si está utilizando un CheckBoxField en su vista de cuadrícula como se muestra a continuación, entonces el código para obtener el valor de la casilla de verificación es el que se proporciona en el segundo fragmento de código.

Marcado de columna de casilla de verificación en GridView

 <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" 
         SortExpression="Discontinued" />

Obtener el valor de la casilla de verificación en el código subyacente

bool isChecked = (gvOrders.SelectedRow.Cells[11].Controls[0] as CheckBox).Checked;

Sin embargo, si está utilizando una columna de plantilla en su vista de cuadrícula, entonces debe seguir un enfoque diferente que se explica a continuación. En su código subyacente,

  • primero debe obtener la fila de datos de gridview

  • y luego busque el control de la casilla de verificación usando el ID de la casilla de verificación control que especificó en su marcado html, que es CheckBox1 en ejemplo de código a continuación (no necesita preocuparse por obtener la celda que contiene la casilla de verificación en este caso)

Columna de casilla de verificación con plantilla

<asp:TemplateField HeaderText="CheckBox Column">
<ItemTemplate>
    <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Eval("Discontinued") %>'  />
</ItemTemplate>

Obtener el valor de la casilla de verificación en el código subyacente

bool isChecked = (gvOrders.SelectedRow.FindControl("CheckBox1") as CheckBox).Checked;
1
Sunil 13 nov. 2017 a las 04:27