2011-09-07 3 views
1

나는이 필드에 TemplateField와 체크 박스가있는 DataGrid를 가지고 있습니다. 이 체크 박스는 데이터베이스의 1 또는 0에 따라 선택 여부를 표시합니다.DataGrid에서 체크 박스를 선택하고 DB를 업데이트하는 것을 결정

<asp:TemplateField HeaderText="Normal User Logging"> 
     <ItemTemplate> 
      <asp:CheckBox runat="server" ID="normalLogging" Checked='<%# Eval("normal_toggle") == 1 %>' 
      AutoPostBack="true" /> 
     </ItemTemplate> 
     </asp:TemplateField> 

이 데이터 그램에는 여러 행이 있습니다. 하나가 선택 될 때마다 어떤 체크 박스가 선택되었는지 어떻게 결정할 지 궁금합니다. 예를 들어, 세 번째 행의 확인란을 클릭 한 사람을 어떻게 알 수 있습니까?

답변

1

명시된 내용에 따라 PostBack을 수행하는 확인란이 아니라 일부 다른 버튼이 있으므로 전체 선택을 한 번에 확인할 수 있습니다. 이 경우 체크 박스는 AutoPostBack="true"이 아니어야합니다.

foreach (GridViewRow row in gv.Rows) 
{ 
    CheckBox cb = row.FindControl("cb") as CheckBox; 
    if (cb != null) 
    { 
     if(cb.Checked) 
     { 
      //Do your thing here 
     } 
    } 
} 

업데이트

OP (저스틴) 그는 각 CheckBox 구성 클릭에 대한 DB를 업데이트하기를 원하는 게시 : 말했다

, 당신의 버튼의 코드는 다음과 같이 될 것이다.

<asp:TemplateField HeaderText="Normal User Logging"> 
    <ItemTemplate> 
     <asp:CheckBox runat="server" ID="normalLogging" 
         Checked='<%# Eval("normal_toggle") == 1 %>' 
         AutoPostBack="true" 
         OnCheckedChanged="cb_CheckedChanged" 
         yourID='<%#Eval("yourIdField") %>'/> 
    </ItemTemplate> 
</asp:TemplateField> 

C# 코드 뒤에 :

영문 코드 :

protected void cb_CheckedChanged(object sender, EventArgs e) 
{ 
    Checkbox cb = sender as CheckBox; 
    string yourID = cb.Attributes["yourID"]; 
    //Do your thing 
} 
+0

아니요, 확인란을 선택하면 언제든지 게시됩니다. DB를 업데이트하고이를 사용자에게 반영하길 원합니다. – Justin

+0

좋아, 좋아 보인다. 그러나 내 질문은 여전히 ​​상자가 확인되었는지 확인하는 방법에 남아 있습니다. 그래서 코드 뒤에, 네 번째 행의 체크 박스가 아니라 두 번째임을 어떻게 알 수 있습니까? 체크 박스 객체가 전송되는 것을 볼 수 있지만, 어떤 행이 들어 있는지 확인할 방법이 없습니다. – Justin

+0

아, 그래, 맞아. 나는 그것을 포함하도록 내 대답을 업데이 트했습니다. 희망이 도움이됩니다! –

1

당신이 DataGridViewCheckBoxColumn 제어 종류와 열을 생성하고 사용하는 경우,이 솔루션은 처리 CheckBox에의 OnCheckedChanged 이벤트 Click 이벤트 및 CellContentClick, 아래 예 참조

private void Form1_Load(object sender, EventArgs e) 
    { 
     DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn(); 
     col.Name = "ColumnName"; 
     col.HeaderText = "HeaderTest"; 
     col.TrueValue = "True"; 
     col.FalseValue = "False"; 
     this.dataGridView1.Columns.Add(col); 
     this.dataGridView1.CellContentClick += new DataGridViewCellEventHandler(dataGridView1_CellContentClick); 
     this.dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick); 
    } 

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (this.dataGridView1.Columns[e.ColumnIndex].Name == "ColumnName") 
     { 
      DataGridViewCheckBoxCell cell = this.dataGridView1.CurrentCell as DataGridViewCheckBoxCell; 
      if (cell.Value == cell.TrueValue) 
       //your code here    
     } 
    } 

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex >= 0 && this.dataGridView1.Columns[e.ColumnIndex].Name == "ColumnName") 
     { 
      DataGridViewCheckBoxCell cell = this.dataGridView1.CurrentCell as DataGridViewCheckBoxCell; 
      if (cell.Value == cell.TrueValue) 
      { 
       //your code here 
      } 
     } 
    } 

감사합니다.

관련 문제