Aspx不会从Repeater更新数据库

雅各布·K

我一直在做一个aspx网站,但遇到了一些我无法做到的事情。

我有一个从数据库填充的中继器。中继器的每个单元格都有一个Literal和一个Textbox。它们都填充了相同的数据,但默认情况下文本框是隐藏的。仅显示文本框,并且当用户单击编辑按钮时隐藏文字。

全部取材于本教程中的编辑Repeater内联:在此处输入链接描述

但是,我的问题是:我还有一个完成按钮(doneBtn),用于当用户完成在Repeater中的行的编辑时—该按钮与数据库中的一条准备好的语句一起使用,以用来自Repeater的新数据更新一行。就是行不通..

当我单击“编辑”时,将隐藏“文字”并显示文本框,但是如果我编辑一些文本并单击“完成”,则数据库中什么也不会发生。文本框被隐藏,并且文字再次显示,但是没有数据被编辑。

如果我将每个参数值更改为C#代码中的硬编码字符串,则可以强制它“工作”

SqlParameter doneActID = cmd.Parameters.Add("@ActivityID", SqlDbType.Int);
doneActID.Direction = ParameterDirection.Input;
doneActID.Value = "Some String";

我包括了用于中继器编辑的C#代码和准备好的语句,以保证良好的性能。

我希望有人能告诉我我做错了什么愚蠢的事情,因为我敢肯定这是愚蠢的,但是我使用适当的编码(我都是前端人员)还是很新的,所以对我轻松一点。

protected void RepeaterActivities_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        RepeaterItem item = e.Item;

        LinkButton crudEdit = (LinkButton)item.FindControl("crudEdit");
        LinkButton crudDelete = (LinkButton)item.FindControl("crudDelete");
        LinkButton crudDone = (LinkButton)item.FindControl("crudDone");
        LinkButton crudCancel = (LinkButton)item.FindControl("crudCancel");

        Literal LiteralID = (Literal)item.FindControl("LiteralID");
        TextBox TextBoxID = (TextBox)item.FindControl("TextBoxID");

        Literal LiteralTitle = (Literal)item.FindControl("LiteralTitle");
        TextBox TextBoxTitle = (TextBox)item.FindControl("TextBoxTitle");

        Literal LiteralDOTW = (Literal)item.FindControl("LiteralDOTW");
        TextBox TextBoxDOTW = (TextBox)item.FindControl("TextBoxDOTW");

        Literal LiteralTOTD = (Literal)item.FindControl("LiteralTOTD");
        TextBox TextBoxTOTD = (TextBox)item.FindControl("TextBoxTOTD");

        Literal LiteralDesc = (Literal)item.FindControl("LiteralDescription");
        TextBox TextBoxDesc = (TextBox)item.FindControl("TextBoxDescription");

        Literal LiteralRoom = (Literal)item.FindControl("LiteralRoom");
        TextBox TextBoxRoom = (TextBox)item.FindControl("TextBoxRoom");

        Literal LiteralImageUrl = (Literal)item.FindControl("LiteralImgUrl");
        Image ImageImgUrl = (Image)item.FindControl("ImageImgUrl");
        TextBox TextBoxImageUrl = (TextBox)item.FindControl("TextBoxImgUrl");

        Literal LiteralCoachID = (Literal)item.FindControl("LiteralCoachID");
        TextBox TextBoxCoachID = (TextBox)item.FindControl("TextBoxCoachID");

        if (e.CommandName == "editBtn")
        {
            crudEdit.Visible = false;
            crudDelete.Visible = false;
            crudDone.Visible = true;
            crudCancel.Visible = true;

            LiteralID.Visible = false;
            TextBoxID.Visible = true;

            LiteralTitle.Visible = false;
            TextBoxTitle.Visible = true;

            LiteralDOTW.Visible = false;
            TextBoxDOTW.Visible = true;

            LiteralTOTD.Visible = false;
            TextBoxTOTD.Visible = true;

            LiteralDesc.Visible = false;
            TextBoxDesc.Visible = true;

            LiteralRoom.Visible = false;
            TextBoxRoom.Visible = true;

            ImageImgUrl.Visible = false;
            LiteralImageUrl.Visible = false;
            TextBoxImageUrl.Visible = true;

            LiteralCoachID.Visible = false;
            TextBoxCoachID.Visible = true;
        }

        else if (e.CommandName == "deleteBtn")
        {
            SqlConnection conn = new SqlConnection(@"data source = localhost; user = root; password = toor; database = dblocal");
            SqlCommand cmd = null;

            try
            {
                conn.Open();

                cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "delete";

                SqlParameter activityID = cmd.Parameters.Add("@ActivityID", SqlDbType.Int);
                activityID.Direction = ParameterDirection.Input;
                activityID.Value = LiteralID.Text;

                cmd.ExecuteNonQuery();

                showDataInTables();
            }

            catch (Exception ex)
            {
                Label1.Text = ex.Message;
            }

            finally
            {
                conn.Close();
            }
        }

        else if (e.CommandName == "doneBtn")
        {
            SqlConnection conn = new SqlConnection(@"data source = localhost; user = root; password = toor; database = dblocal");
            SqlCommand cmd = null;

            try
            {
                conn.Open();

                cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "update";

                SqlParameter doneActID = cmd.Parameters.Add("@ActivityID", SqlDbType.Int);
                doneActID.Direction = ParameterDirection.Input;
                doneActID.Value = TextBoxID.Text;

                SqlParameter doneActTitle = cmd.Parameters.Add("@Title", SqlDbType.NVarChar, 50);
                doneActTitle.Direction = ParameterDirection.Input;
                doneActTitle.Value = TextBoxTitle.Text;

                SqlParameter doneActDOTW = cmd.Parameters.Add("@DayOfTheWeek", SqlDbType.NVarChar, 50);
                doneActDOTW.Direction = ParameterDirection.Input;
                doneActDOTW.Value = TextBoxDOTW.Text;

                SqlParameter doneActTOTD = cmd.Parameters.Add("@TimeOfTheDay", SqlDbType.Time, 7);
                doneActTOTD.Direction = ParameterDirection.Input;
                doneActTOTD.Value = TextBoxTOTD.Text;

                SqlParameter doneActDesc = cmd.Parameters.Add("@Description", SqlDbType.NVarChar, 50);
                doneActDesc.Direction = ParameterDirection.Input;
                doneActDesc.Value = TextBoxDesc.Text;

                SqlParameter doneActRoom = cmd.Parameters.Add("@RoomNumber", SqlDbType.NVarChar, 50);
                doneActRoom.Direction = ParameterDirection.Input;
                doneActRoom.Value = TextBoxRoom.Text;

                SqlParameter doneActImg = cmd.Parameters.Add("@ImgUrl", SqlDbType.NVarChar, 50);
                doneActImg.Direction = ParameterDirection.Input;
                doneActImg.Value = TextBoxImageUrl.Text;

                SqlParameter doneActCoachID = cmd.Parameters.Add("@CoachID", SqlDbType.Int);
                doneActCoachID.Direction = ParameterDirection.Input;
                doneActCoachID.Value = TextBoxCoachID.Text;

                cmd.ExecuteNonQuery();

                showDataInTables();
            }

            catch (Exception ex)
            {
                Label1.Text = ex.Message;
            }

            finally
            {
                conn.Close();
            }
        }

        else if (e.CommandName == "cancelBtn")
        {
            crudEdit.Visible = true;
            crudDelete.Visible = true;
            crudDone.Visible = false;
            crudCancel.Visible = false;

            LiteralID.Visible = true;
            TextBoxID.Visible = false;

            LiteralTitle.Visible = true;
            TextBoxTitle.Visible = false;

            LiteralDOTW.Visible = true;
            TextBoxDOTW.Visible = false;

            LiteralTOTD.Visible = true;
            TextBoxTOTD.Visible = false;

            LiteralDesc.Visible = true;
            TextBoxDesc.Visible = false;

            LiteralRoom.Visible = true;
            TextBoxRoom.Visible = false;

            ImageImgUrl.Visible = true;
            LiteralImageUrl.Visible = true;
            TextBoxImageUrl.Visible = false;

            LiteralCoachID.Visible = true;
            TextBoxCoachID.Visible = false;
        }
    }

    <asp:Repeater ID="RepeaterActivities" runat="server" OnItemCommand="RepeaterActivities_ItemCommand">
    <HeaderTemplate>
        <tr>
            <th>Edit</th>
            <th>ID</th>
            <th>Title</th>
            <th>Day of the week</th>
            <th>Time of the day</th>
            <th class="th-description">Description</th>
            <th>Room Number</th>
            <th>Image URL</th>
            <th>Coach ID - FK</th>
        </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td class="crud-edit-delete">
                 <asp:LinkButton ID="crudEdit" runat="server" CommandName="editBtn" Text='<i class="material-icons">mode_edit</i>'></asp:LinkButton>
                 <asp:LinkButton ID="crudDelete" runat="server" CommandName="deleteBtn" Text='<i class="material-icons">delete</i>'></asp:LinkButton>
                 <asp:LinkButton ID="crudDone" runat="server" CommandName="doneBtn" Visible="false" Text='<i class="material-icons icon-done">done</i>'></asp:LinkButton>
                 <asp:LinkButton ID="crudCancel" runat="server" CommandName="cancelBtn" Visible="false" Text='<i class="material-icons">close</i>'></asp:LinkButton>
            </td>
            <td>
                 <asp:Literal ID="LiteralID" runat="server" Text='<%# Eval("ActivityID") %>'></asp:Literal>
                 <asp:TextBox ID="TextBoxID" CssClass="activity-id form-control" runat="server" Text='<%# Eval("ActivityID") %>' Visible="false" ReadOnly="true"></asp:TextBox>
            </td>
            <td>
                 <asp:Literal ID="LiteralTitle" runat="server" Text='<%# Eval("Title") %>'></asp:Literal>
                 <asp:TextBox ID="TextBoxTitle" CssClass="title form-control" runat="server" Text='<%# Eval("Title") %>' Visible="false"></asp:TextBox>
            </td>
            <td>
                 <asp:Literal ID="LiteralDOTW" runat="server" Text='<%# Eval("DayOfTheWeek") %>'></asp:Literal>
                 <asp:TextBox ID="TextBoxDOTW" CssClass="dotw form-control" runat="server" Text='<%# Eval("DayOfTheWeek") %>' Visible="false"></asp:TextBox>
            </td>
            <td>
                 <asp:Literal ID="LiteralTOTD" runat="server" Text='<%# Eval("TimeOfTheDay").ToString().Substring(0, 5) %>'></asp:Literal>
                 <asp:TextBox ID="TextBoxTOTD" CssClass="totd form-control" runat="server" Text='<%# Eval("TimeOfTheDay").ToString().Substring(0, 5) %>' Visible="false"></asp:TextBox>
            </td>
            <td>
                 <asp:Literal ID="LiteralDescription" runat="server" Text='<%# Eval("Description") %>'></asp:Literal>
                 <asp:TextBox ID="TextBoxDescription" CssClass="description form-control" runat="server" Text='<%# Eval("Description") %>' Visible="false"></asp:TextBox>
            </td>
            <td>
                <asp:Literal ID="LiteralRoom" runat="server" Text='<%# Eval("RoomNumber") %>'></asp:Literal>
                <asp:TextBox ID="TextBoxRoom" CssClass="room form-control" runat="server" Text='<%# Eval("RoomNumber") %>' Visible="false"></asp:TextBox>
            </td>
            <td>
                <asp:Image ID="ImageImgUrl" runat="server" ImageUrl='<%# "pictures/" + Eval("ImgUrl")%>' />
                <asp:Literal ID="LiteralImgUrl" runat="server" Text='<%# Eval("ImgUrl") %>'></asp:Literal>
                <asp:TextBox ID="TextBoxImgUrl" CssClass="img-url form-control" runat="server" Text='<%# Eval("ImgUrl") %>' Visible="false"></asp:TextBox>
            </td>
            <td>
                <asp:Literal ID="LiteralCoachID" runat="server" Text='<%# Eval("CoachID_FK") %>'></asp:Literal>
                <asp:TextBox ID="TextBoxCoachID" CssClass="coach-id form-control" runat="server" Text='<%# Eval("CoachID_FK") %>' Visible="false"></asp:TextBox>
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

  CREATE PROCEDURE [dbo].[update]
    @ActivityID int,
    @Title nvarchar(50),
    @DayOfTheWeek nvarchar(50),
    @TimeOfTheDay time(7),
    @Description nvarchar(255),
    @RoomNumber nvarchar(50),
    @ImgUrl nvarchar(50),
    @CoachID int
  AS
    UPDATE Activities
    SET Title = @Title, DayOfTheWeek = @DayOfTheWeek, TimeOfTheDay =  @TimeOfTheDay, Description = @Description, RoomNumber = @RoomNumber, ImgUrl = @ImgUrl, CoachID_FK = @CoachID
    WHERE ActivityID = @ActivityID;
  RETURN
独自的

我更喜欢使用基本的HTML控件而不是asp.net控件。它们在某种程度上更易于管理,您可以从表单数据中提取内容。我将在此处显示代码的相关部分,您将明白这一点。

aspx:

<asp:Repeater ID="RepeaterActivities" runat="server" OnItemCommand="RepeaterActivities_ItemCommand">
    <HeaderTemplate>
        <tr>
            <th>Edit</th>
            <th>ID</th>
            <th>Title</th>
            <th>Day of the week</th>
            <th>Time of the day</th>
            <th class="th-description">Description</th>
            <th>Room Number</th>
            <th>Image URL</th>
            <th>Coach ID - FK</th>
        </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td class="crud-edit-delete">
                 <asp:LinkButton ID="crudEdit" runat="server" CommandName="editBtn" Text='<i class="material-icons">mode_edit</i>'></asp:LinkButton>
                 <asp:LinkButton ID="crudDelete" runat="server" CommandName="deleteBtn" Text='<i class="material-icons">delete</i>'></asp:LinkButton>
                 <asp:LinkButton ID="crudDone" runat="server" CommandName="doneBtn" Visible="false" Text='<i class="material-icons icon-done">done</i>'></asp:LinkButton>
                 <asp:LinkButton ID="crudCancel" runat="server" CommandName="cancelBtn" Visible="false" Text='<i class="material-icons">close</i>'></asp:LinkButton>
            </td>
            <td>
                 <label><%# Eval("ActivityID") %></label>
                 <input id="TextBoxID" runat="server" name="TextBoxID" visible="false" class="activity-id form-control" value='<%# Eval("ActivityID") %>' />
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

aspx.cs:

protected void RepeaterActivities_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    // leave out the TextBox TextBoxID = (TextBox)item.FindControl("TextBoxID");
    // all your other code here...
    else if (e.CommandName == "doneBtn")
    {
        string id = Request.Form["TextBoxId"];

        SqlConnection conn = new SqlConnection(@"data source = localhost; user = root; password = toor; database = dblocal");
        SqlCommand cmd = null;

        try
        {
            conn.Open();

            cmd = conn.CreateCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "update";

            SqlParameter doneActID = cmd.Parameters.Add("@ActivityID", SqlDbType.Int);
            doneActID.Direction = ParameterDirection.Input;
            doneActID.Value = id;

       // rest of your code...

我所做的是asp:TextBox用普通的htmlinput控件替换了请记住给它一个name属性,以便您可以在回发时从表单数据中读取值。然后,在后面的代码中读取该值并将其分配给一个字符串,然后将该字符串用作您的DB方法的输入参数。
没有测试所有这些,但是应该可以。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL插入不会更新数据库

来自分类Dev

EntityFramework不会更新数据库

来自分类Dev

PHP SQL中的更新不会更新数据库

来自分类Dev

PHP SQL中的更新不会更新数据库

来自分类Dev

更新外部JSON时Muzei数据库不会更新

来自分类Dev

数据表不会更新我的数据库

来自分类Dev

PDO不会更新数据库中的数据,为什么?

来自分类Dev

数据不会在数据库中更新

来自分类Dev

MYSQL和PHP数据库更新不会更新数据库

来自分类Dev

X可编辑,不会更新数据库中的值

来自分类Dev

EF迁移不会自动更新数据库

来自分类Dev

如果权限全部未选中不会更新数据库

来自分类Dev

从数据库中选择的文本不会更新

来自分类Dev

SQLite数据库不会使用Python变量更新

来自分类Dev

猫鼬findOneAndUpdate不会更新我的数据库

来自分类Dev

Express不会将更新的行保存到数据库

来自分类Dev

行不会在数据库中更新

来自分类Dev

实体框架不会更新Amazon RDS SQL数据库

来自分类Dev

EF迁移不会自动更新数据库

来自分类Dev

无法更新数据库而不会出现错误

来自分类Dev

数据库不会使用php形式更新值

来自分类Dev

在页面刷新之前,Ajax请求不会更新数据库

来自分类Dev

React表格不会更新Mongo数据库

来自分类Dev

Django Migration不会更新我的数据库

来自分类Dev

Firebase实时数据库不会更新值

来自分类Dev

从数据库更新模型不会从数据库添加新表

来自分类Dev

即使更改了数据库版本并卸载了Android App,SQLiteOpenHelper也不会更新数据库

来自分类Dev

使用Repeater命令参数更新数据库时发生无效的列名userId错误

来自分类Dev

使用log4net登录到Oracle数据库不会立即更新数据库

Related 相关文章

热门标签

归档