C# 是否在gridview中获取特定数据行?

C# 是否在gridview中获取特定数据行?,c#,asp.net,sql-server,gridview,code-behind,C#,Asp.net,Sql Server,Gridview,Code Behind,如何在asp.net中获取GridView的特定数据行 我在这里有这样的图像: 例如: 我想得到studentID=2011017997及其CourseNo='CmpE 515'的具体数据行 如何获取他们的特定数据?GridViewRow是否有一个内置函数来获取数据行 以下是aspx代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ValidateSubjectTeacher.aspx.cs" Inherits="

如何在asp.net中获取GridView的特定数据行

我在这里有这样的图像:

例如: 我想得到studentID=2011017997及其CourseNo='CmpE 515'的具体数据行

如何获取他们的特定数据?GridViewRow是否有一个内置函数来获取数据行

以下是aspx代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ValidateSubjectTeacher.aspx.cs" Inherits="SoftwareAnalysisAndDesign.SAD.ValidateSubjectTeacher" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Student Assessment Form</title>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <link rel="stylesheet" href="Bootstrap/css/bootstrap-theme.css" />
    <link rel="stylesheet" href="Bootstrap/css/bootstrap.min.css"/> 
    <link rel="stylesheet" type="text/css" href="Stylesheets/ValidateSubjectTeacherStyle.css"/>

    <!--Side bar link-->
    <link rel="stylesheet" href="SidebarBootstrap/css/bootstrap.min.css" />
    <link rel="stylesheet" href="SidebarBootstrap/css/simple-sidebar.css" />
</head>
<body>
    <form id="form1" runat="server">
    <div class="container" style="text-align: center; margin: 0 auto;">
        <br />
        <h1>Validation of Subjects</h1>
        <br />
        <asp:GridView runat="server" CssClass="table table-hover table-bordered" ID="ValidateSubject" Style="text-align: center"></asp:GridView>
    </div>

    <div style="float: right; padding-right: 75px;">
        <button type="button" runat="server" class="btn btn-primary" onserverclick="ValidateSubject_Click">Validate</button>
    </div>
    </form>

    <script src="jquery/jquery.min.js"></script>
    <script src="Bootstrap/js/bootstrap.min.js"></script>
</body>
</html>
如何在gridview中获取studentID和courseNo的值?我想获得Student ID和CourseNo的数据行,并将其放在我的一个参数中:

cmd.Parameters.AddWithValue("@studentID", );
cmd.Parameters.AddWithValue("@Coursenumber", );
这个问题只是这个链接的后续问题
现在,我想在选中复选框事件并触发按钮ValidateSubject\u Click事件时更新我的查询。

由于您可以使用gvRow访问GridViewRow,因此您可以从第1行和第2行单元格访问StudentID和Coursenumber,如下所示

var studentID = grvRow.Cells[0].Text;
var courseNumber = grvRow.Cells[1].Text;

解决问题的另一个例子是:

<asp:GridView ID="gvStudent" runat="server" AutoGenerateColumns="False" DataSourceID="StudentDataSource">
        <Columns>
            <asp:BoundField DataField="Serial" HeaderText="Serial" SortExpression="Serial" />
            <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
            <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
            <asp:BoundField DataField="Age" HeaderText="Age" SortExpression="Age" />
            <asp:TemplateField HeaderText="Verified" SortExpression="Verified">
                <EditItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Verified") %>' />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Verified") %>' 
                        AutoPostBack="true" OnCheckedChanged="chkVerified_CheckedChanged" />
                    <asp:HiddenField ID="hddSerial" runat="server" Value='<%# Bind("Serial") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:Label ID="lblResult" runat="server" Text="You have validate: N/a"></asp:Label>

    <asp:ObjectDataSource ID="StudentDataSource" runat="server" SelectMethod="Get" TypeName="WebFormApp._32846281.Models.Student"></asp:ObjectDataSource>
这就解决了这个问题:如果您对列重新排序,首先使用该方法,您必须更改后面的代码


在我的解决方案中,如果对列重新排序,后面的代码是相同的。

为什么需要
GridViewRow
?如果需要查找其他记录/行,通常使用数据源(即数据库)。如果启用分页且该行位于当前不存在的页中,则该方法至少会失败。您的参数有问题。不要用撇号把它们括起来。而是这样写:
updateassessmentformset Status=@Validated其中StudentID=@StudentID和CourseNo=@Coursenumber
我会注意到这一点。是的,这在我的程序中是一个很大的风险,当涉及到分页时,问题是我已经在页面加载中绑定了我的数据源。当gridview已经绑定时,是否可以检索数据?能否显示相关的asp代码?您使用templatefields还是boundfields?您想从当前行还是其他行获取studentid和coursenumber?我已经编辑了我的问题,先生,关于sqlcommand,这是使用参数进行查询的正确方法吗?我的GridView是自动生成的列,因此我获取所有数据表并绑定它们,我只需要当前行的studentid和coursenumber。我得到一个错误((附加信息:无法将类型为“System.Web.UI.HtmlControl.HtmlButton”的对象强制转换为类型为“System.Web.UI.WebControl.CheckBox”))谢谢,我确实获得了数据。
<asp:GridView ID="gvStudent" runat="server" AutoGenerateColumns="False" DataSourceID="StudentDataSource">
        <Columns>
            <asp:BoundField DataField="Serial" HeaderText="Serial" SortExpression="Serial" />
            <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
            <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
            <asp:BoundField DataField="Age" HeaderText="Age" SortExpression="Age" />
            <asp:TemplateField HeaderText="Verified" SortExpression="Verified">
                <EditItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Verified") %>' />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Verified") %>' 
                        AutoPostBack="true" OnCheckedChanged="chkVerified_CheckedChanged" />
                    <asp:HiddenField ID="hddSerial" runat="server" Value='<%# Bind("Serial") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:Label ID="lblResult" runat="server" Text="You have validate: N/a"></asp:Label>

    <asp:ObjectDataSource ID="StudentDataSource" runat="server" SelectMethod="Get" TypeName="WebFormApp._32846281.Models.Student"></asp:ObjectDataSource>
 protected void chkVerified_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox chk = (CheckBox)sender;
        GridViewRow grvRow = (GridViewRow)chk.NamingContainer;

        HiddenField hf = grvRow.FindControl("hddSerial") as HiddenField;

        lblResult.Text = string.Format("You have validate:{0}", hf.Value);

    }