2014-04-10 2 views
0

내 .NET 웹 응용 프로그램에있는 gridview 가지고있다 -의 GridView 행의 체크 박스

<asp:GridView ID="gvwQueues" runat="server" AutoGenerateColumns="false" OnPageIndexChanging="gvwQueues_PageIndexChanging" 
        PageSize="5" Width="577px"> 
        <Columns> 
         <asp:BoundField DataField="Text" HeaderText="Text"> 
          <ItemStyle Width="150px"></ItemStyle> 
         </asp:BoundField> 
         <asp:BoundField DataField="ItemNumber" HeaderText="Item Number"> 
          <ItemStyle Width="150px"></ItemStyle> 
         </asp:BoundField> 
         <asp:BoundField DataField="Directory" HeaderText="Directory"> 
          <ItemStyle Width="150px"></ItemStyle> 
         </asp:BoundField> 
         <asp:TemplateField HeaderText="IsActive"> 
         <ItemTemplate> 
          <asp:CheckBox ID="Yes" runat="server" Text = "Yes" /> 
          <asp:CheckBox ID="No" runat="server" Text = "No"/> 

          <%-- <asp:CheckBoxList ID="IsActive" runat="server"> 
           <asp:ListItem>Yes.</asp:ListItem> 
           <asp:ListItem>No.</asp:ListItem> 
          </asp:CheckBoxList>--%> 
         </ItemTemplate> 
        </asp:TemplateField> 
        </Columns> 
       </asp:GridView> 

가 지금은 체크 박스를 사용하려면 : - 서버 측에서 적절한 함수를 호출하려면 "예"또는 "아니오"를 그 gridview 행의 각 항목을 "활성"또는 "비활성"으로 만듭니다.

활성은 항목이 모든 사용자에게 표시된다는 것을 의미합니다. 비활성은 관리자를 제외한 모든 사용자에게 항목이 표시되지 않음을 의미합니다.

답변

1

로직을 수정하려면 두 가지 수정이 필요할 수 있습니다.

a. 사용자가 중 하나만 '예'또는 '아니요'만 선택할 수 있도록 확인란을 사용하는 대신 라디오 버튼을 사용해보십시오. 또한이 라디오 버튼 중 하나만 선택 가능하게하려면 아래의 라디오 버튼을 그룹화해야합니다.

<asp:TemplateField HeaderText="IsActive"> 
     <ItemTemplate> 
      <asp:RadioButton ID="yesRadioButton" runat="server" Text="Yes" GroupName="IsActiveGroup" OnCheckedChanged="RadioButtonIsActive_CheckedChanged" /> 
      <asp:RadioButton ID="noRadioButton" runat="server" Text="No" GroupName="IsActiveGroup" OnCheckedChanged="RadioButtonIsActive_CheckedChanged" /> 
     </ItemTemplate> 
</asp:TemplateField> 

을 그리고 RadioButtonIsActive_CheckedChanged 방법의 CheckChanged 이벤트를 모두 지정 : 그래서 아래로 '이 isActive'템플릿 필드를 대체합니다.

b. 다음은 RadioButtonIsActive_CheckedChanged

protected void RadioButtonIsActive_CheckedChanged(object sender, EventArgs e) 
     { 
      foreach (GridViewRow row in gvwQueues.Rows) 
      { 
       RadioButton yesRadioButton = (RadioButton)row.FindControl("yesRadioButton"); 
       if (yesRadioButton.Checked) 
       { 
        //Make Items Active 
       } 

       else 
       { 
        //Make Items Inactive 
       } 
      } 
     } 

날 어떤 쿼리의 경우에 알려 mehtod 뒤에 코드에 대한 코드입니다.

0

변경 될 때 기능을 호출하려면 확인란을 선택 하시겠습니까?

그런 다음 당신이해야 할 모든 당신이 당신이 역할에 대한 질문, 또는에 구속력이 측면 아웃

public void chkStatus_OnCheckedChanged(object sender, EventArgs e) 
{ 
//Make active inactive 
} 

을하고 싶은 함수를 작성

<asp:CheckBox ID="chkStatus" runat="server" Text = "Yes" 
OnCheckedChanged="chkStatus_OnCheckedChanged"/> 

서버 측 OnCheckedChanged를 추가입니다 그리드?

+0

서버에 체크 박스 값이 무엇인지 어떻게 알 수 있습니까? – Philo

+0

chkStatus.Checked는 확인/선택 취소에 따라 true 또는 false 값을 제공합니다. –

0

그리드보기에 DataKeyNames을 사용할 수 있습니다.

한 번 시도하십시오.

<asp:GridView ID="gvwQueues" runat="server" AutoGenerateColumns="false" OnPageIndexChanging="gvwQueues_PageIndexChanging" 
       PageSize="5" Width="577px" DataKeyNames="ItemNumber"> 
       <Columns> 
        <asp:BoundField DataField="Text" HeaderText="Text"> 
         <ItemStyle Width="150px"></ItemStyle> 
        </asp:BoundField> 
        <asp:BoundField DataField="ItemNumber" HeaderText="Item Number"> 
         <ItemStyle Width="150px"></ItemStyle> 
        </asp:BoundField> 
        <asp:BoundField DataField="Directory" HeaderText="Directory"> 
         <ItemStyle Width="150px"></ItemStyle> 
        </asp:BoundField> 
        <asp:TemplateField HeaderText="IsActive"> 
        <ItemTemplate> 
         <asp:CheckBox ID="chkYes" runat="server" Text="Yes" OnCheckedChanged="YesOrNo_OnCheckedChanged" 
         AutoPostBack="true" /> 
        <asp:CheckBox ID="chkNo" runat="server" Text="No" OnCheckedChanged="YesOrNo_OnCheckedChanged" 
         AutoPostBack="true" /> 

         <%-- <asp:CheckBoxList ID="IsActive" runat="server"> 
          <asp:ListItem>Yes.</asp:ListItem> 
          <asp:ListItem>No.</asp:ListItem> 
         </asp:CheckBoxList>--%> 
        </ItemTemplate> 
       </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 

그리고 당신이 보낸 인수의 ClientID

protected void YesOrNo_OnCheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox chkSender = (CheckBox)sender; 
    foreach (GridViewRow gvRow in gvwQueues.Rows) 
    { 
     if (gvRow.RowType == DataControlRowType.DataRow) 
     { 
      CheckBox chkYes = (CheckBox)gvRow.FindControl("chkYes"); 
      CheckBox chkNo = (CheckBox)gvRow.FindControl("chkNo"); 
      if (chkSender.ClientID == chkYes.ClientID || chkSender.ClientID == chkNo.ClientID) 
      { 
       int ItemId = Convert.ToInt32(gvwQueues.DataKeys[gvRow.RowIndex].Value);//here is the item number 
       if (chkNo.Checked) 
       { 
        chkYes.Checked = false; 
        //code to inactive 
       } 
       else if (chkYes.Checked) 
       { 
        chkNo.Checked = false; 
        //code to activate 
       } 
      } 
     } 
    } 
} 

또 하나의 제안을 사용하여 항목 번호를 잡을 수 대신 CheckboxesRadiobuttons을 사용하는 것이 좋습니다. 귀하의 경우에는 Checkboxes을 사용하여 여러 조건을 처리해야합니다.

관련 문제