【问题标题】:Casting object to CheckBox in bulk updates在批量更新中将对象投射到 CheckBox
【发布时间】:2011-06-14 00:43:44
【问题描述】:

到目前为止,我一直在关注 this,文本框一切正常,但是当尝试将其修改为复选框时出现错误:无法将“System.Web.UI.WebControls.TextBox”类型的对象转换为“类型” System.Web.UI.WebControls.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 />

我们将不胜感激!提前致谢!

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    我认为要回答这个问题,aspx 文件的内容是必需的,但我会尽力提供帮助。表单中的元素 isapprovedCheckBox 很可能仍设置为标签 asp:Text。因此,系统无法将文本框转换为复选框。

    能否也包含您的 aspx 内容?

    【讨论】:

    • 感谢您的回复。我已经编辑了我的帖子,请看一下。
    • 您的 aspx 中有此代码:&lt;asp:TextBox ID="isapprovedCheckBox" runat="server" Text='&lt;%# Bind("isapproved") %&gt;'&gt;&lt;/asp:TextBox&gt; 您需要改为使用 &lt;asp:CheckBox...
    • 发布代码后,@Virmundi 似乎是正确的,您的 isapprovedCheckBox 控件在您的 asp 中声明为 asp:TextBox 而不是 asp:CheckBox。
    • 谢谢大家!忘记更改它,但我仍然有错误。当我点击更新按钮时,它会更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2014-02-13
    • 2012-08-14
    相关资源
    最近更新 更多