2010-07-08 4 views
0

확인란의 첫 번째 열이있는 gridview가 있습니다. 그리드는 사용자 검색시 데이터베이스에서 반환되는 하나 이상의 레코드를 표시합니다. 그리드는 "protected void DisplayGridData()"이라는 프로 시저에 채워집니다. 해당 레코드의 "비활성"열이 "1"이면 확인란을 비활성화하고 싶습니다. 어떻게해야합니까?gridview의 확인란을 비활성화하십시오.

HTML 코드는 다음과 같습니다

  <asp:GridView ID="gvCanadaOrders" runat="server" AutoGenerateColumns="False" CellPadding="2" CellSpacing="2" GridLines="None" Width="100%" AllowPaging="True" PageSize="30" 
       onpageindexchanging="gvCanadaOrders_PageIndexChanging" ForeColor="#333333" DataKeyNames="RecID"> 
       <Columns> 
        <asp:TemplateField HeaderText="Disable" > 
         <ItemTemplate> 
          <asp:CheckBox ID="cbPONumber" runat="server"/> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <%--<asp:BoundField DataField="Rec_ID" HeaderText="Rec_ID" HtmlEncode="False"></asp:BoundField>--%> 
        <asp:BoundField DataField="Inactive" HeaderText="Inactive" HtmlEncode="False" ></asp:BoundField> 
        <asp:BoundField DataField="PO_Number" HeaderText="PO Number" HtmlEncode="False" ></asp:BoundField> 
        <asp:BoundField DataField="VENDOR_NAME" HeaderText="Vendor Name"></asp:BoundField> 
        <asp:BoundField DataField="ITEM_DESC" HeaderText="Item Description"></asp:BoundField> 
        <asp:BoundField DataField="MFG_PART_NO" HeaderText="MFG Part Number"></asp:BoundField> 
        <asp:BoundField DataField="System_DATE" HeaderText="System Date"></asp:BoundField> 
        <asp:BoundField DataField="PRINT_DATE" HeaderText="Print 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> 

있는 gridview를로드하는 코드는 다음과 같습니다

protected void btnDisable_Click(object sender, EventArgs e)  
{ 
    try 
    { 
     string strPONumber = ""; 
     foreach (GridViewRow gvr in gvCanadaOrders.Rows) 
     { 
      if (((CheckBox)gvr.FindControl("cbPONumber")).Checked == true) 
      { 
       string strRec_ID = gvCanadaOrders.DataKeys[gvr.RowIndex].Value.ToString(); 

       //Update table here, diable inactive field; 
       SqlConnection con = new SqlConnection(strConn); 
       string sqlCanadaOrdersUpdate = "usp_CanadaOrders_Close"; 
       SqlCommand cmdCanadaOrdersUpdate = new SqlCommand(sqlCanadaOrdersUpdate, con); 

       cmdCanadaOrdersUpdate.CommandType = CommandType.StoredProcedure; 

       cmdCanadaOrdersUpdate.Parameters.Add(new SqlParameter("@rec_ID", SqlDbType.VarChar, 50)); 
       cmdCanadaOrdersUpdate.Parameters["@rec_ID"].Value = strRec_ID; 

       cmdCanadaOrdersUpdate.Parameters.Add(new SqlParameter("@usr_id", SqlDbType.VarChar, 50)); 
       cmdCanadaOrdersUpdate.Parameters["@usr_id"].Value = User.Identity.Name.Substring(User.Identity.Name.Length - 7); 

       con.Open(); 

       SqlDataAdapter sqladaCanadaOrdersUpdate = new SqlDataAdapter(cmdCanadaOrdersUpdate); 
       cmdCanadaOrdersUpdate.ExecuteNonQuery(); 
      } 
      ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Purchase Order " + strPONumber + " has been disabled.');", true); 
     } 
    } 

있는 gridview databoundrow의 코드는 다음과 같습니다

void gvCanadaOrders_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // Display the company name in italics. 
     e.Row.Cells[1].Text = "<i>" + e.Row.Cells[1].Text + "</i>"; 
    } 
} 

답변

3

GridView의 RowDataBound 이벤트에 후크. 거기에서 DataItem을 레코드 유형으로 캐스팅 할 수 있습니다. 그런 다음 플래그 테스트를 통해 행 컨트롤을 수정할 수 있습니다.

VB.net에서이 코드를 사용하고 C# 태그별로 빠른 변환을 수행 했으므로 오류를 용서해주십시오.

void myGridView_RowDataBound(Object sender, GridViewRowEventArgs e) { 
    if (e.Row.RowType == DataControlRowType.DataRow) { 
     MyObject myObj = (myObj)e.Row.DataItem; 
     if (myObj.flag) { 
      CheckBox cb = (CheckBox)e.Row.FindControl("myCheckBox"); 
      cb.Enabled=false; 
     } 
    } 
} 

편집 : 질문에 대한 편집마다 마크 업에 OnRowDataBound가 없습니다. OnRowDataBound = "gvCanadaOrders_RowDataBound"를 추가해야합니다. OnPageIndexChanging과 동일한 방식으로 작동합니다.

+0

이라고를? – user279521

+0

마크 업에서 이름을 지정하거나 코드 숨김에서 동적으로 지정할 수 있습니다. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx –

+0

이름이 마크 업에 지정되어 있지만 RowDataBound 이벤트가 호출되지 않습니다. 그것에있는 중단 점) – user279521

0

RowDataBound 이벤트를 처리하고 e.Row 매개 변수를 사용하여 확인란을 찾으십시오.

0
당신이 CSS에서 속성을 해제하여 다른 의해 진행해야하는 HTML 체크 박스를 사용하는 경우는, 모든 경우에 작동하지 않습니다

다음 RowDataBound 이벤트가 어떻게

e.Row.Cells[0].Attributes["disabled"] = "disabled"; 

Reference link

관련 문제