2015-09-28 2 views
0

Я хочу изменить определенный текст в моей GridView вот изображение ниже:Изменить текст в определенной строке в GridView, используя флажок

enter image description here

примера, если я нажму на кнопку CheckBox конкретную строку «Статус» текст это изменение на «Validated».

Это мой ASPX код позади:

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

    namespace SoftwareAnalysisAndDesign.SAD 
    { 
     public partial class TeacherPage : System.Web.UI.Page 
     { 
      private MSConnector connector = new MSConnector(); 
      private DataSet SubjectlistData; 
      private DataTable SubjectlistTable; 
      string query = null; 
      protected void Page_Load(object sender, EventArgs e) 
      { 

       if (!IsPostBack) 
       { 
        //Populate The Select Tag with Subjects 
        SubjectList.DataSource = Session["TeacherSubjectList"]; 
        SubjectList.DataTextField = "CourseNo"; 
        SubjectList.DataValueField = "CourseNo"; 
        SubjectList.DataBind(); 
       } 
     } 
    }  
    protected void TeacherSubjects_Click(object sender, EventArgs e) 
    { 
     string getText = SubjectList.SelectedItem.Text; 
     //Connection String 
     connector.ConnectionString = "Data Source=keith;Initial Catalog=SAD;Integrated Security=True"; 

     query = "select StudentID,CourseNo,CourseDescription,Units,Day,StartTime,EndTime,Room,Instructor,Amount,Status from assessmentform where CourseNo = '" + getText + "'"; 

     SubjectlistData = connector.ExecuteQuery(query); 
     SubjectlistTable = SubjectlistData.Tables[0]; 

     //Add a colum check row 
     SubjectlistTable.Columns.Add("Check", Type.GetType("System.Boolean")); 

     Session["ValidateSubject"] = SubjectlistTable; 

     Response.Redirect("ValidateSubjectTeacher.aspx"); 
    } 

добавить флажок в моем ряду на мой GridView с помощью этого:

 //Add a colum check row 
     SubjectlistTable.Columns.Add("Check", Type.GetType("System.Boolean")); 

     Session["ValidateSubject"] = SubjectlistTable; 

я прохожу мой GridView с помощью сеанса на другой странице, ИТС aspx code за ValidatePage:

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

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(); 
      } 

      //I add my checkbox in the last row using this 
      foreach (GridViewRow row in ValidateSubject.Rows) 
      { 
       check = row.Cells[row.Cells.Count - 1].Controls[0] as CheckBox; 
       check.Enabled = true; 
      } 
     } 


     protected void ValidateSubject_Click(object sender, EventArgs e) 
     { 
      if(check.Checked) 
      { 
       //This condition here is I want to change the Status when check to validated. 
      } 
     } 
    } 

в моем коде за использованием sessio n Я связываю все данные в DataTable (FirstPage);

DataSet ds = connector.ExecuteQuery(query); 
DataTable dt = dt.Table[0]; 
dt.DataBind(); 
Session["SubjectList"] = dt; 

ответ

1

Вы можете использовать NamingContainer свойство как это: -

protected void ValidateSubject_Click(object sender, EventArgs e) 
{ 
    CheckBox chk= (CheckBox)sender; 
    GridViewRow grvRow = (GridViewRow)chk.NamingContainer;//This will give you row 
    grvRow.Cells[10].Text = "Validated"; //Updated the cell text in that row. 

    //Or if Status is a control like label then // 
    Label StatusLabel = (Label)grvRow.FindControl("StatusLabel"); 
    StatusLabel.Text = "Validated"; 
} 

В качестве альтернативы, вы можете также использовать RowDataBound событие.

Update:

Поскольку вы привязка сетки с непосредственно т.е. AutoGenerateColumns установить, как верно, вы должны прикрепить обработчик события флажка программно, так как это: -

//I add my checkbox in the last row using this 
foreach (GridViewRow row in ValidateSubject.Rows) 
{ 
    check = row.Cells[row.Cells.Count - 1].Controls[0] as CheckBox; 
    check.Enabled = true; 
    check.CheckedChanged += ValidateSubject_Click; //Bind the event 
    check.AutoPostBack = true; //Set the AutoPostBack property to true 
} 

Теперь в вашем случае сначала найдите строку с помощью флажка, затем обновите столбец Status следующим образом: -

protected void ValidateSubject_Click(object sender, EventArgs e) 
{ 
    CheckBox chk= (CheckBox)sender; 
    GridViewRow grvRow = (GridViewRow)chk.NamingContainer;//This will give you row 
    if(chk.Checked) 
    { 
     grvRow.Cells[10].Text = "Validated"; 
    } 
} 
+0

Что такое [п] в grvRow.Cells [п] .Текст? –

+0

@laurencekeithalbano - 'n' является ячейкой вашего столбца' Status'. Но если вы определили 'Status' как элемент управления как ярлык, лучше найдите его, указав индекс ячейки. –

+0

Если я хочу изменить столбец gridview, используя этот сэр, как мне это сделать? –

1

Вы можете использовать метод расширения, как это:

public static class myExtensionsMethods 
{ 
    public static void validateRow(this object sender) 
    { 
     int columnIndex = 10; 
     GridViewRow myRow = ((Control)sender).Parent as GridViewRow; 
     myRow.Cells[columnIndex].Text = "Validated"; 
    } 
} 

Метод расширения позволит назвать его таким образом

protected void ValidateSubject_Click(object sender, EventArgs e) 
{ 
    if (check.Checked) 
    { 
     sender.validateRow(); 
    } 
} 
+0

Код отправителя.validateRow() получает ошибку «объект» не содержит определения для «validateRow» и никакого метода расширения «validateRow» –

+0

Вам нужно добавить метод с классом, чтобы он работал. Опубликовать обновленный код –