2010-06-11 3 views
3

GridView에서 체크 박스를 사용하고 있습니다. 체크 박스가 체크 된 경우 두 번째 열의 셀 값을 결정해야합니다.ASP.Net에서 GridView의 "checked"체크 박스에 rowID 값 받기

나는 인덱스로의 GridView의 세포에 접근 방지하기 위해, C#을 2008 년과 ASP.net

    <asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="False" CellPadding="4" GridLines="None" Width="100%" AllowPaging="True" PageSize="20" 
        onpageindexchanging="gvOrders_PageIndexChanging" ForeColor="#333333"> 
        <Columns> 
         <asp:TemplateField HeaderText="VerifiedComplete" > 
          <ItemTemplate> 
           <asp:CheckBox ID="cbPOID" runat="server"/> 
          </ItemTemplate> 
         </asp:TemplateField> 
         <asp:BoundField DataField="PurchaseOrderID" HeaderText="PurchaseOrderID" HtmlEncode="False" ></asp:BoundField> 
         <asp:BoundField DataField="VENDOR_ID" HeaderText="Vendor ID"></asp:BoundField> 
         <asp:BoundField DataField="VENDOR_NAME" HeaderText="Vendor Name"></asp:BoundField> 
         <asp:BoundField DataField="ITEM_DESC" HeaderText="Item Desc"></asp:BoundField> 
         <asp:BoundField DataField="SYS_DATE" HeaderText="System Date"></asp:BoundField> 
        </Columns> 
        <FooterStyle CssClass="GridFooter" BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
        <PagerStyle CssClass="GridPager" ForeColor="#333333" BackColor="#FFCC66" HorizontalAlign="Center" /> 
        <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> 
        <HeaderStyle CssClass="GridHeader" BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
        <RowStyle CssClass="GridItem" BackColor="#FFFBD6" ForeColor="#333333" /> 
        <AlternatingRowStyle CssClass="GridAltItem" BackColor="White" /> 
       </asp:GridView> 





     protected void btnDisable_Click(object sender, EventArgs e) 
    { 
      foreach (GridViewRow gvr in gvOrders.Rows) 
      { 

       if (((CheckBox)gvr.FindControl("cbPOID")).Checked == true) 
       { 
        string strPrimaryid = gvr.Cells[2].ToString(); 
       } 
      } 

    } 
+0

명확히하십시오 : "관련 열 확인란을 선택하면 두 번째 열의 셀 값을 확인해야합니다." 서로 다른 행의 동일한 열에 두 개의 체크 박스가 있고 체크 상태를 비교하려고합니까? 그리고 언제/어디에서 이것을 비교해야합니까? –

+0

아니요, 행에 하나의 체크 박스 만 있습니다. – user279521

+0

질문에 대한 추가 정보를 제공하면 원래 질문을 더 잘 편집하고 주석 대신 주석을 추가하는 것이 좋습니다. 값과 체크 박스의 체크 상태는 어디에 필요합니까? 아마도 소스 코드를 제공해야 할 것입니다. –

답변

2

이 작업을 수행하는 또 다른 방법을 사용하고, 디자이너의 TemplateField에 원하는 BoundField를 변환하는 것입니다. 그런 다음 FindControl 메서드를 사용하여 해당 셀의 텍스트 값을 가져옵니다. 기본적으로 디자이너는 새 TemplateField의 Label 컨트롤에 "Label1"과 같은 이름을 지정합니다.

그 과정이 더 쉬우면 디자이너 부분을 보여주기 위해 사진을 몇 장 더 추가 할 것입니다. 어쨌든, 영문은 수동으로도 할 수있는, 그래서 같이 변경됩니다 :

string strPrimaryid = gvr.FindControl("Label1").Text; 

:

<asp:BoundField DataField="PurchaseOrderID" ...</asp:BoundField> 

<asp:TemplateField HeaderText="PurchaseOrderID"> 
<ItemTemplate> 
    <asp:Label ID="Label1" runat="server" Text='<%# Bind("PurchaseOrderID") %>'></asp:Label> 
</ItemTemplate> 
<EditItemTemplate> 
    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("PurchaseOrderID") %>'></asp:TextBox> 
</EditItemTemplate> 
</asp:TemplateField> 

그런 다음이 간단한 코드 변경을 할 것이다된다

이 작업을 수행하는 더 좋은 방법은 DataK GridView 컨트롤의 eys 기능. 첫 번째 단계는 당신의 GridView의 DataKeyNames 속성을 설정하는 것입니다 : 당신의 PurchaseOrderID 열이 int 유형의 가정, 그리고

<asp:GridView ID="gvOrders" runat="server" DataKeyNames="PurchaseOrderID" ...> 

을, 당신은 수 같은 줄을 변경합니다 :

int primaryid = (int)gvOrders.DataKeys[gvr.RowIndex].Value; 
관련 문제