2011-06-14 34 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; 

     } 
    } 
} 

示例代码这里的ASPX标记

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 2011-06-14 01:05:20

+1

您的代码如下:aspx: '' 需要让它说' Virmundi 2011-06-14 01:27:30

+0

在您发布代码后,它看起来像@Virmundi是正确的,您的isapprovedCheckBox控件在您的aspx中被声明为asp:TextBox而不是asp:CheckBox。 – Austin 2011-06-14 01:28:11