2011-03-20 3 views
1

확인란이있는 DataGridview가 있으며 열 안의 확인란은 외부 확인란으로 선택하거나 선택 취소 할 수 있습니다. 그것은 모든 열을 선택하고 데이터베이스에 데이터를 저장하는 동안 잘 작동합니다. 하지만 DataGridview의 체크 박스를 외부 체크 박스로 체크를 해제하고 DataGridview 내에서 하나의 체크 박스를 다시 선택하면 다시 칼럼 내의 모든 체크 박스의 rowindex를 취합니다.checkbox 및 datagridview에 대한 질문

if (chkbranches.Checked == true) 
{ 
    foreach (DataGridViewRow dr in gridviewholiday.Rows) 
    { 
    dr.Cells[0].Value = true; 
    } 

    for (int i = 0; i < gridviewholiday.Rows.Count; i++) 
    { 
    rowindex = i; 
    list.add(rowindex);//to put the rowindex in array list 
    } 
} 
else if (chkbranches.Checked == false) 
{ 
    foreach (DataGridViewRow dr in gridviewholiday.Rows) 
    { 
    dr.Cells[0].Value = false; 
    gridviewholiday.Refresh(); 
    gridviewholiday.ClearSelection(); 
    list.Clear(); 
    } 
} 
+0

코드가 모든 체크 박스를 선택/선택 취소 할 것을하지 않는 당신을 제대로 작동했다? 우리가 필요로하는 것은 DataGridView에서 하나의 체크 박스를 선택할 때 코드하는 것입니다. –

+0

이 코드를 작성한 곳 (이벤트)과 만족스러운 응답을 발견 한 이전 질문에 대한 답변으로 표시해야합니다 – V4Vendetta

답변

0

왜 chkbranches가 선택되어 있으면 두 번 반복합니까? 첫 번째 foreach 내에서 목록에 항목을 추가 할 수 없습니까? 선택을 취소하는 루프에서 왜 새로 고침을하고 매번 두 컨트롤을 지우시겠습니까? 아마도 한 번만 필요했을 것입니다.

그리고 언급했듯이 이것은 단일 검사에 대해서는 아무 것도하지 않습니다. 당신이 그것을 기대한다면, 그것은 문제인 것처럼 보입니다.

0

당신의 시도는 확실하지 않지만 모든 체크 된 행을 삭제하는 버튼과 비슷한 점이 있습니다. 나는 확인란과 같이 템플릿 필드를 사용 : I 뒤 삭제 버튼 코드를 다음

<asp:TemplateField> 
    <ItemTemplate> 
    <asp:CheckBox ID="cbSelector" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 

수행

protected void btnDeleteChecked_Click(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in gridOrders.Rows) 
    { 
     CheckBox cb = (CheckBox)row.FindControl("cbSelector"); 
     if ((null != cb) && cb.Checked) 
     { 
      uint id = Convert.ToUInt32(gridOrders.DataKeys[row.RowIndex].Value); 
      gInvoiceDB.DeleteInvoice(id, true); 
     } 
    } 
}