2012-02-19 1 views
0

사용 :삭제의 GridView 및 DB의 레코드 나는 GridView1과 같이 선언 (체크 박스 및 삭제 버튼)

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" GridLines="None" DataKeyNames="Case_ID"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate><asp:CheckBox ID="cb" runat="server" /></ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="No."> 
      <ItemTemplate><%# Container.DataItemIndex + 1 %></ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField HeaderText="Case Title" DataField="caseTitle"/> 
     <asp:BoundField HeaderText="Age" DataField="age" /> 
     <asp:BoundField HeaderText="Gender" DataField="gender"/> 
     <asp:BoundField HeaderText="Treated By" DataField="owner"/> 
     <asp:BoundField HeaderText="Added Date" DataField="sDate"/> 
     <asp:BoundField HeaderText="" DataField="Case_ID" Visible="false"/> 
    </Columns> 
</asp:GridView> 

를이는

DataTable aTable = new DataTable(); 

aTable.Columns.Add("caseTitle", typeof(string)); 
aTable.Columns.Add("age", typeof(string)); 
aTable.Columns.Add("gender", typeof(string)); 
aTable.Columns.Add("owner", typeof(string)); 
aTable.Columns.Add("sDate", typeof(string)); 
aTable.Columns.Add("Case_ID", typeof(int)); 
I want to use Case_ID as an index for the GridView, so I can delete a record from database when I check its check box in the GridView. 
에 대한 I는 데이터 소스로 사용하고 DataTable에있다 여기

는 시나리오 :

의 GridView이 사용자가 클릭 체크 상자를 선택 할 수 있습니다 데이터베이스의 경우 정보를 표시합니다 [삭제] 버튼이 작업은 다시 삭제해야 데이터베이스의 코드;

내가 [삭제] 버튼이 코드를 실행하면 :

foreach (GridViewRow row in GridView1.Rows) 
{ 
    CheckBox c = (CheckBox)row.FindControl("cb"); 

    if (c.Checked) 
    { 
     int rowIndex = GridView1.SelectedIndex; 
     string id = GridView1.DataKeys[rowIndex].Value.ToString(); 
     ds.DeleteCommand = " delete from Cases where Case_ID=" + id + ""; 
     ds.Delete(); 
    } 
} 

내가 C는 항상 내가 몇 가지 기록을 확인하고 있습니다 경우에도 널 것으로 나타났습니다; 그래서 문제는 그 체크 박스의 변화를 감지하지 못해 그것을 탐지하기 위해 무엇을 할 수 있습니까?

답변

0

삭제 버튼은 어디에 있습니까 ... 삭제 버튼의 "인수"속성을 사용하여 피팅 확인란 버튼을 찾으세요. 나는 보통 삭제하고자하는 행의 ID를 버튼의 인자 속성 값으로 둔다. 그래서 체크 상자를 검색 할 필요가없는 이유는 ... (클라이언트 쪽에서는 체크 상자의 클라이언트 클릭 이벤트를 사용하여 삭제 단추의 인수 특성을 업데이트합니다).

보안에 대한 또 다른 단어 : 보안 문제를 피하기 위해 저장 프로 시저를 사용하십시오 (C#으로 하드 코딩 된 것처럼 삭제 문이나 SQL 문을 절대로 넣지 마십시오).

편집 : 또한

검사 :

 GridViewRow.RowType==RowType.DataRow 

현재 행 가능성이 그와 같은 헤더 행, 또는 무언가 때문에 당신이 null 얻을 - 그리고 체크 박스가 행의 이런 종류의 일부가 아닌 . 재생을위한

+0

덕분에, 삭제 버튼이있는 gridview 이후에 나타납니다 '' 난 을 미안 ID를 단추의 인수로 사용하는 방법을 모르겠지만 두 개 이상의 확인란을 선택할 수 있습니다. 하나 이상의 ID를 할당 할 수 있습니까? – Meensat

+0

@Meensat 각 행에 대해 수행해야하는 다른 수표로 내 대답을 편집했습니다. 하지만, 나는 그것을 개선해야한다고 말해야합니다 - 각 행에 대한 작업 삭제 링크 버튼을 시도한 다음, 삭제되어야하는 행을 검색 할 필요가 없습니다 ... – lionheart