C# 如何在asp/c中从gridview中查找复选框的值#

C# 如何在asp/c中从gridview中查找复选框的值#,c#,asp.net,C#,Asp.net,我最难找到复选框的值。我搜索了所有地方,但似乎无法将其设置为正确的值,没有任何结果,或者我得到了一个空引用错误。我已经检查了其他线程/帖子,似乎没有一个能正常工作 我所要做的就是获取复选框的值,但我似乎做不到 这些信息来自一个数据库。我可以获取字符串值,但无法获取复选框值 无论如何,这是我用来获取字符串值和复选框值的代码: //String grabber Convert.ToString(gvOrders.SelectedRow.Cells[2].Text); //Checkbox

我最难找到复选框的值。我搜索了所有地方,但似乎无法将其设置为正确的值,没有任何结果,或者我得到了一个空引用错误。我已经检查了其他线程/帖子,似乎没有一个能正常工作

我所要做的就是获取复选框的值,但我似乎做不到

这些信息来自一个数据库。我可以获取字符串值,但无法获取复选框值

无论如何,这是我用来获取字符串值和复选框值的代码:

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

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

无论如何,请不要消极,我一直在努力寻找价值,但它就是不起作用

提前谢谢

编辑:

新增代码:

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:

<%@ 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>




不清楚要从复选框返回什么值。是否要获取复选框标签或选择状态

无论如何,我认为您应该像这样找到checkbox控件,而不是直接获取单元格内容

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.
这就是你要找的吗

编辑:我可以看到您没有指定GridView.AutoGenerateColumns属性,这意味着它默认为true。这意味着列的布局由绑定到网格视图的数据决定。这可能会导致调试时出现问题,因为您提供的单元格索引可能会根据数据读取器返回的数据而更改。我建议您将
AutoGenerateColumns
设置为
false
,并手动指定所需的布局


您可以看到一个示例

如果您在网格视图中使用CheckBoxField,如下所示,那么获取复选框值的代码如第二个代码段所示

选中GridView中的列标记

 <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" 
         SortExpression="Discontinued" />
但是,如果您在gridview中使用模板列,则需要遵循下面介绍的不同方法。 在你的代码背后

  • 您需要首先获取gridview的数据行

  • 然后使用复选框的ID查找复选框控件 控件,该控件是在html标记中指定的,即中的
    CheckBox1
    下面的代码示例(在本例中,您无需费心获取包含复选框的单元格)

模板化复选框列

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

我得到:System.NullReferenceException:“对象引用未设置为对象的实例。”复选框位于哪个单元格上?您必须输入正确的索引号。你能展示更多你拥有的代码吗?这将有助于更快地发现问题。我编辑了主要帖子,代码在原始帖子下面。感谢您的帮助。您是否也可以发布html代码,即.aspx文件的内容?我已经根据您的代码编辑了我的答案,并提供了更多信息。实现链接中给出的网格视图可能有助于解决此问题,或者至少有助于调试。
bool isChecked = (gvOrders.SelectedRow.Cells[11].Controls[0] as CheckBox).Checked;
<asp:TemplateField HeaderText="CheckBox Column">
<ItemTemplate>
    <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Eval("Discontinued") %>'  />
</ItemTemplate>
bool isChecked = (gvOrders.SelectedRow.FindControl("CheckBox1") as CheckBox).Checked;