2011-06-14 2 views
1

지금까지 this을 수행 중이었지만 모든 항목이 텍스트 상자로 문제가 없지만 확인란을 수정하려고하면 오류가 발생합니다. 'System.Web.UI.WebControls'유형의 객체를 캐스팅 할 수 없습니다. TextBox '를 입력하여'System.Web.UI.WebControls.CheckBox '를 입력하십시오.CheckBox를 일괄 업데이트로 캐스팅

TextBox를 사용할 때 작동하지만, 일괄 업데이트로 모든 CheckBox를 편집 할 수있는 방법은 무엇입니까?

여기

private bool tableCopied = false; 
     private DataTable originalDataTable; 

     protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
       if (!tableCopied) 
       { 
        originalDataTable = ((DataRowView)e.Row.DataItem).Row.Table.Copy(); 
        ViewState["originalValueTable"] = originalDataTable; 
        tableCopied = true; 
       } 
     } 

     protected void UpdateButton_Click(object sender, EventArgs e) 
     { 
      originalDataTable = (DataTable)ViewState["originalValueTable"]; 

      foreach (GridViewRow r in GridView1.Rows) 
       if (IsRowModified(r)) 
       { 
        GridView1.UpdateRow(r.RowIndex, false); 
       } 

      tableCopied = false; 
      GridView1.DataBind(); 
     } 

     protected bool IsRowModified(GridViewRow r) 
     { 
      int currentID; 
      string currentreservedate; 
      string currentisapproved; 

      currentID = Convert.ToInt32(GridView1.DataKeys[0].Value); 


      currentreservedate = ((TextBox)r.FindControl("reservedateTextBox")).Text; 
      currentisapproved = ((CheckBox)r.FindControl("isapprovedCheckBox")).Text; 

      DataRow row = originalDataTable.Select(String.Format("reservationid = {0}", currentID))[0]; 

      if (!currentreservedate.Equals(row["reservedate"].ToString())) 
      if (!currentisapproved.Equals(row["isapproved"].ToString())) 
      { 
       return true; 
      } 

      return false; 

     } 
    } 
} 

뒤에 샘플 코드의 다음

Pending Reservation<br /> 

     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
      SelectCommand="SELECT dbo.BookReservation.reservationid, dbo.BookReservation.bookid, dbo.BookReservation.EmployeeID, dbo.BookReservation.reservedate, dbo.BookReservation.isapproved, dbo.BookReservation.reschedule, dbo.BookReservation.isdeleted, dbo.TblBooks.booktitle FROM dbo.BookReservation INNER JOIN dbo.TblBooks ON dbo.BookReservation.bookid = dbo.TblBooks.bookid" 
      DeleteCommand="DELETE FROM [BookReservation] WHERE [reservationid] = @reservationid" 
      InsertCommand="INSERT INTO [BookReservation] ([bookid], [EmployeeID], [reservedate], [isapproved], [reschedule], [isdeleted]) VALUES (@bookid, @EmployeeID, @reservedate, @isapproved, @reschedule, @isdeleted)" 

      UpdateCommand="UPDATE [BookReservation] SET [bookid] = @bookid, [EmployeeID] = @EmployeeID, [reservedate] = @reservedate, [isapproved] = @isapproved, [reschedule] = @reschedule, [isdeleted] = @isdeleted WHERE [reservationid] = @reservationid"> 
      <DeleteParameters> 
       <asp:Parameter Name="reservationid" Type="Int32" /> 
      </DeleteParameters> 
      <UpdateParameters> 
       <asp:Parameter Name="bookid" Type="Int64" /> 
       <asp:Parameter Name="EmployeeID" Type="String" /> 
       <asp:Parameter Name="reservedate" Type="DateTime" /> 
       <asp:Parameter Name="isapproved" Type="Boolean" /> 
       <asp:Parameter Name="reschedule" Type="Boolean" /> 
       <asp:Parameter Name="isdeleted" Type="Boolean" /> 
       <asp:Parameter Name="reservationid" Type="Int32" /> 
      </UpdateParameters> 
      <InsertParameters> 
       <asp:Parameter Name="bookid" Type="Int64" /> 
       <asp:Parameter Name="EmployeeID" Type="String" /> 
       <asp:Parameter Name="reservedate" Type="DateTime" /> 
       <asp:Parameter Name="isapproved" Type="Boolean" /> 
       <asp:Parameter Name="reschedule" Type="Boolean" /> 
       <asp:Parameter Name="isdeleted" Type="Boolean" /> 
      </InsertParameters> 
     </asp:SqlDataSource> 

     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="true" AllowSorting="true" 
      DataKeyNames="reservationid, bookid, EmployeeID, reservedate " DataSourceID="SqlDataSource1" OnRowDataBound="GridView1_RowDataBound" > 

      <Columns> 

       <asp:BoundField DataField="reservationid" HeaderText="reservationid" 
        InsertVisible="False" ReadOnly="True" 
        SortExpression="reservationid" Visible="False" /> 

       <asp:BoundField DataField="bookid" HeaderText="bookid" 
        SortExpression="bookid" Visible="False" /> 

       <asp:BoundField DataField="booktitle" HeaderText="Title" 
        SortExpression="booktitle" /> 

       <asp:BoundField DataField="EmployeeID" HeaderText="Reserved by" 
        SortExpression="EmployeeID" /> 

       <%--<asp:BoundField DataField="reservedate" HeaderText="Date reserved" 
        SortExpression="reservedate" />--%> 

       <asp:TemplateField HeaderText="Reserve Date" 
        SortExpression="reservedate"> 
        <EditItemTemplate> 
         <asp:TextBox ID="reservedateTextBox" runat="server" Text='<%# Bind("reservedate") %>'> 
         </asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:TextBox ID="reservedateTextBox" runat="server" Text='<%# Bind("reservedate") %>'> 
         </asp:TextBox> 
        </ItemTemplate> 
       </asp:TemplateField> 

       <%--<asp:CheckBoxField DataField="isapproved" HeaderText="Approved" 
        SortExpression="isapproved" />--%> 

       <asp:TemplateField HeaderText="Apprvoed" 
        SortExpression="isapproved"> 
        <EditItemTemplate> 
         <asp:TextBox ID="isapprovedCheckBox" runat="server" Text='<%# Bind("isapproved") %>'> 
         </asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:TextBox ID="isapprovedCheckBox" runat="server" Text='<%# Bind("isapproved") %>'> 
         </asp:TextBox> 
        </ItemTemplate> 
       </asp:TemplateField> 

       <asp:CheckBoxField DataField="reschedule" HeaderText="Reschedule" 
        SortExpression="reschedule" /> 

       <asp:CheckBoxField DataField="isdeleted" HeaderText="Deleted" 
        SortExpression="isdeleted" /> 

      </Columns> 

     </asp:GridView> 
     <br /> 
     <br /> 

    <asp:Button ID="UpdateButton" runat="server" Text="Update" OnClick="UpdateButton_Click" /> 

     <br /> 

도움이 많이 주시면 감사하겠습니다 영문 마크 업입니다! 미리 감사드립니다!

답변

1

이 질문에 대답하기 위해 aspx 파일의 내용이 필요하다고 생각하지만 도와 드리겠습니다. 아마도 isapprovedCheckBox 양식의 요소는 여전히 asp : Text 태그로 설정되어 있습니다. 결과적으로 시스템은 텍스트 상자를 체크 박스로 변환 할 수 없습니다.

당신은 aspx 콘텐츠도 포함시킬 수 있습니까?

+0

답장을 보내 주셔서 감사합니다. 내 게시물을 수정했습니다. 한번보세요. – Loupi

+1

이 코드는 aspx에 있습니다 : ' ' You ' Virmundi

+0

코드를 게시 한 후 @Virmundi가 올바른 것처럼 보입니다. isapprovedCheckBox 컨트롤이 asp : CheckBox 대신 asp : TextBox로 aspx에 선언되었습니다. – Austin

관련 문제