2012-01-13 1 views
0

отметьте любой флажок, а затем нажмите кнопку «Button1». в ответ на него будет отображаться идентификатор отмеченного элемента, но в следующем идентификаторе кода неверно. пожалуйста, скажите мне, что не так в моем коде, пожалуйста, посмотрите на следующий код. test.aspx.cs выглядит следующим образомRowState of Gridview не указывает на правильную строку

using System; 
using System.Collections; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 

public partial class test : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Response.Write("Aler id are ="); 
    foreach (GridViewRow row in TaskGridView.Rows) 
    { 
     if (row.RowState == DataControlRowState.Alternate) 
     { 

      Response.Write("," +row.Cells[1].Text);// id 

     } 
    } 
    } 
} 

test.aspx как следовать

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<%@ Import Namespace="System.Data" %> 


<script runat="server"> 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    if (!Page.IsPostBack) 
    { 
     // Create a new table. 
     DataTable taskTable = new DataTable("TaskList"); 

     // Create the columns. 
     taskTable.Columns.Add("Id", typeof(int)); 
     taskTable.Columns.Add("Description", typeof(string)); 
     taskTable.Columns.Add("IsComplete", typeof(bool)); 

     //Add data to the new table. 
     for (int i = 0; i < 20; i++) 
     { 
     DataRow tableRow = taskTable.NewRow(); 
     tableRow["Id"] = i; 
     tableRow["Description"] = "Task " + i.ToString(); 
     tableRow["IsComplete"] = false;    
     taskTable.Rows.Add(tableRow); 
     } 

     //Persist the table in the Session object. 
     Session["TaskTable"] = taskTable; 

     //Bind data to the GridView control. 
     BindData(); 
    } 

    } 

    protected void TaskGridView_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
    TaskGridView.PageIndex = e.NewPageIndex; 
    //Bind data to the GridView control. 
    BindData(); 
    } 

    protected void TaskGridView_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
    //Set the edit index. 
    TaskGridView.EditIndex = e.NewEditIndex; 
    //Bind data to the GridView control. 
    BindData(); 
    } 

    protected void TaskGridView_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
    { 
    //Reset the edit index. 
    TaskGridView.EditIndex = -1; 
    //Bind data to the GridView control. 
    BindData(); 
    } 

    protected void TaskGridView_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    {  
    //Retrieve the table from the session object. 
    DataTable dt = (DataTable)Session["TaskTable"]; 

    //Update the values. 
    GridViewRow row = TaskGridView.Rows[e.RowIndex]; 
    dt.Rows[row.DataItemIndex]["Id"] = ((TextBox)(row.Cells[1].Controls[0])).Text; 
    dt.Rows[row.DataItemIndex]["Description"] = ((TextBox)(row.Cells[2].Controls[0])).Text; 
    dt.Rows[row.DataItemIndex]["IsComplete"] = ((CheckBox)(row.Cells[3].Controls[0])).Checked; 

    //Reset the edit index. 
    TaskGridView.EditIndex = -1; 

    //Bind data to the GridView control. 
    BindData(); 
    } 

    private void BindData() 
    { 
    TaskGridView.DataSource = Session["TaskTable"]; 
    TaskGridView.DataBind(); 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title>GridView example</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

     <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> 

     <asp:GridView ID="TaskGridView" runat="server" 
     AutoGenerateEditButton="True" 
     AllowPaging="true" 
     OnRowEditing="TaskGridView_RowEditing"   
     OnRowCancelingEdit="TaskGridView_RowCancelingEdit" 
     OnRowUpdating="TaskGridView_RowUpdating" 
     OnPageIndexChanging="TaskGridView_PageIndexChanging"> 
     </asp:GridView> 

    </div> 
    </form> 
</body> 
</html> 

ответ

0

RowState может быть побитовое комбинация, и вы, возможно, также необходимо обратить внимание на RowType, так как вас будут интересовать только строки данных. Например,

foreach (GridViewRow row in TaskGridView.Rows) 
{ 
    if ((row.RowState & DataControlRowState.Alternate) == DataControlRowState.Alternate && 
     row.RowType == DataControlRowType.DataRow) 
    { 

     Response.Write("," +row.Cells[1].Text);// id 

    } 
} 
+0

я попытался это, но не успех –

+0

@Abduljalil, что вывод, что вы получите? – VinayC

+0

Что происходит, когда вы просто проверяете DataRow: if (row.RowType == DataControlRowType.DataRow) {Response.Write ("," + row.Cells [1] .Text); }? – Brissles

0

У меня есть модифицированный код, теперь моя проблема решена. Теперь окончательный код

foreach (GridViewRow row in TaskGridView.Rows) 
{ 
    if (row.RowType == DataControlRowType.DataRow) 
    { 
     if(((CheckBox)(row.Cells[1].Controls[1])).Checked) 

     Response.Write("," +row.Cells[1].Text);// id 

    } 
} 
Смежные вопросы