2013-05-27 4 views
0

CheckBox 컨트롤이 포함 된 GridView가 있습니다. 일단 사용자가 원하는 행을 확인하면 단추를 클릭하고 확인 된 행마다 데이터베이스를 업데이트해야합니다.GridView에서 CheckBox 값을 가져 오는 문제가 발생했습니다.

나는 체크 박스 값을 살펴보기 위해 물마루 gridview 행을 반복하는 코드를 가지고 있지만 체크 된 경우에도 항상 false입니다. 무시 상자에서 체크 상자에 대한 참조를 얻지 만 항상 거짓입니다. 내가 여기서 무엇을 놓치고 있니?

aspx.cs 파일 :

protected void Ignore_Click(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in grdNotReceived.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      CheckBox ignore = (CheckBox)row.FindControl("chkIgnore"); 

      if (ignore.Checked) 
      { 
       // Update Database 
      } 
     } 
    } 
} 

.aspx 페이지 :

<asp:GridView ID="grdNotReceived" runat="server" 
    Width="600px" 
    CssClass="mGrid" 
    AlternatingRowStyle-CssClass="alt" 
    PagerStyle-CssClass="pgr" AutoGenerateColumns="false"> 
<AlternatingRowStyle CssClass="alt"/> 
<Columns> 
    <asp:BoundField DataField="Store" HeaderText="Store" /> 
    <asp:BoundField DataField="Dept" HeaderText="Dept" /> 
    <asp:BoundField DataField="Type" HeaderText="Type" /> 
    <asp:BoundField DataField="RefNumber" HeaderText="RefNumber" /> 
    <asp:BoundField DataField="Date" HeaderText="Date" /> 
    <asp:BoundField DataField="Vendor" HeaderText="Vendor" /> 
    <asp:BoundField DataField="Total" HeaderText="Total" /> 
    <asp:TemplateField> 
     <ItemTemplate> 
      <asp:CheckBox ID="chkIgnore" runat="server" Checked="false" /> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:CheckBox ID="chkIgnore" runat="server" Checked="false" /> 
     </EditItemTemplate> 
    </asp:TemplateField> 
</Columns> 
</asp:GridView> 

의 GridView 데이터 바인딩 방법 : 당신의 데이터 바인딩 기능 (LoadExceptions()가) somwhere에

protected void LoadExceptions() 
{ 
    Database db = new Database(); 
    SqlCommand sql = new SqlCommand(); 

    sql.CommandText = "getSobeysNotReceived"; 

    this.grdNotReceived.DataSource = db.GetSprocDR(sql); 
    this.grdNotReceived.DataBind(); 

    db.Close(); 
} 
+0

변경할 경우''는 'true'가됩니다. 확인란의 상태를 확인할 때 그 값을 얻습니까? – Brian

+0

예, 변경하면 사실이됩니다. 사용자가 입력 한 값을 선택하지 않는 이유는 무엇입니까? 마스터 페이지 사용과 관련이 있습니까? – Kerberos42

+0

당신이 어떻게 물건을 설치했는지에 대한 구조를 모르기 때문에 말하기가 정말 어렵습니다. 마스터 페이지 또는 하위 페이지의 확인란입니까? – Brian

답변

0

를 호출하는 경우 페이지로드 (예 : Load 이벤트 또는 클래스 생성자)가 우선 적용됩니다. 양식에서 사용자가 변경 한 내용. 페이지를 다시 포스트에있는 경우

LoadExceptions()를 호출하기 전에 if (!Page.IsPostBack)을 추가 할 수 있습니다, 데이터 바인딩하지 마십시오 또는 당신은 그것을 확인 LoadExceptions()를 업데이트 할 수 있습니다

protected void LoadExceptions() 
{ 
    if (!Page.IsPostBack) 
    { 
     Database db = new Database(); 
     SqlCommand sql = new SqlCommand(); 

     sql.CommandText = "getSobeysNotReceived"; 

     this.grdNotReceived.DataSource = db.GetSprocDR(sql); 
     this.grdNotReceived.DataBind(); 

     db.Close(); 
    } 
} 
+0

그 트릭을 했어! 나는 내가 명백한 무엇인가 놓치고 있었다라는 것을 알고 있었다, 내가 유사한 문제를 가지고 있었던 처음이 아니라, 나는 단지 나무를위한 숲을 볼 수 없었다. – Kerberos42

관련 문제