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;