Obtenir une ligne de données spécifique dans gridview?

Comment puis-je get la ligne de données spécifique de mon GridView dans asp.net?

J'ai cette image ici:

entrez la description de l'image ici

Exemple: Je veux get la ligne de données spécifique du studentID = 2011017997 et son CourseNo = 'CmpE 515';

comment puis-je get leurs données spécifiques? Est-ce que GridViewRow a l'une de ces fonctions embeddedes pour get la ligne de données?

Voici le code 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> 

Voici mon code aspx derrière:

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data; namespace SoftwareAnalysisAndDesign.SAD { public partial class ValidateSubjectTeacher : System.Web.UI.Page { CheckBox check = new CheckBox(); protected void Page_Load(object sender, EventArgs e) { if (Session["ValidateSubject"] == null) { Response.Redirect("TeacherPage.aspx", true); } if (!IsPostBack) { ValidateSubject.DataSource = Session["ValidateSubject"]; ValidateSubject.DataBind(); } foreach (GridViewRow row in ValidateSubject.Rows) { check = row.Cells[row.Cells.Count - 1].Controls[0] as CheckBox; //position Check column on last row in gridview check.Enabled = true; check.CheckedChanged += ValidateSubject_Click; //Bind the event on the button check.AutoPostBack = true; //Set the AutoPostBack property to true } } protected void ValidateSubject_Click(object sender, EventArgs e) { CheckBox chk = (CheckBox)sender; GridViewRow grvRow = (GridViewRow)chk.NamingContainer;//This will give row ssortingng validated = "Validated"; ssortingng notyetvalidated = "Not yet validated"; if (chk.Checked) { grvRow.Cells[10].Text = validated; //Open Connection using (SqlConnection conn = new SqlConnection("Data Source=Keith;Initial Catalog=SAD;Integrated Security=True")) { //Open Connection to database try { conn.Open(); } catch (Exception E) { Console.WriteLine(E.ToSsortingng()); } using (SqlCommand cmd = new SqlCommand("Update AssessmentForm set Status = '@Validated' where StudentID = @studentID and CourseNo = '@Coursenumber'" ,conn)) { cmd.Parameters.AddWithValue("@Validated", validated); cmd.Parameters.AddWithValue("@studentID", ); cmd.Parameters.AddWithValue("@Coursenumber", ); } //Close Connection to database try { conn.Open(); } catch (Exception E) { Console.WriteLine(E.ToSsortingng()); } } } else { grvRow.Cells[10].Text = notyetvalidated; } } } } 

Comment puis-je récupérer la valeur de studentID et courseNo dans ma grid? Je veux get la ligne de données de Student ID et CourseNo et la mettre dans l'un de mes parameters ici:

 cmd.Parameters.AddWithValue("@studentID", ); cmd.Parameters.AddWithValue("@Coursenumber", ); 

Cette question est juste une question de suivi à ce lien ici (Changer le text dans la ligne spécifique) Maintenant, cette fois, je veux mettre à jour ma requête lorsque l'événement checkbox est cochée et que le button ValidateSubject_Click event est déclenché.

Puisque vous étiez en mesure d'accéder à GridViewRow en utilisant gvRow , vous pouvez accéder à StudentID et Coursenumber à partir des cellules de ligne 1 et 2 comme suit

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

Un autre exemple pour résoudre votre problème est:

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

dans votre code derrière:

  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 = ssortingng.Format("You have validate:{0}", hf.Value); } 

Cela résout ce problème: si vous réorganisez les colonnes, avec d'abord la méthode, vous devez changer le code derrière

Dans ma solution si vous réorganisez les colonnes le code derrière est le même.