【问题标题】:Use jQuery to delete a duplicate entry from table in database使用 jQuery 从数据库中的表中删除重复条目
【发布时间】:2013-08-26 17:01:16
【问题描述】:

所以我有一个对我来说很棘手的新要求,到目前为止我无法弄清楚。我正在使用 gridview 插入和更新数据。我的要求之一是当用户手动添加新记录时,如果存在相同的“交易编号”,则显示一个弹出窗口。此弹出窗口应显示已存在的记录。他们应该能够单击“使用”、“放弃”或“确定”三个按钮中的一个。 “使用”按钮基本上会关闭弹出窗口并清除用户输入的文本框。“放弃”按钮必须删除存在的记录,以便用户可以使用相同的交易编号插入新记录。这样做的原因是因为交易编号是发生的“交易”中最独特的编号。使用我们从旧应用程序导出到新应用程序的方式,会下载副本,有时会下载比第一次导出时更多的信息。这就是为什么我必须添加一个要求,让用户选择他们要保留的记录。我希望这对大家有意义。我已经干了一些东西,但这是我目前拥有的,我坚持下去。

Jquery 脚本:

<script type="text/javascript">
    $(document).ready(function () {
        function showpopup() {
            $("#popup").dialog("open");
        }

        $("#popup").dialog({
            modal: true,
            width: 450,
            autoOpen: false,
            open: function (type, data) {
                $(this).parent().appendTo("form");
            }
        });

        $("#popup").each(function () {
            var popup = $(this);
            popup.parent().appendTo($("form:first"));
        });
    });
</script>

现在脚本调用的分区有另一个 gridview 来显示现有记录..

<div class="popUpStyle" title="Duplicate Deal Found!" id="popup" style="display:none">
            <asp:GridView ID="gvDealTracking" runat="server" Width="200px" AutoGenerateColumns="False">
                <Columns>
                    <asp:TemplateField HeaderText="Stock #">
                        <ItemTemplate>
                            <asp:Label ID="lblDupStockNumber" runat="server" Text='<%# Bind("StockNumber") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Deal #">
                        <ItemTemplate>
                            <asp:Label ID="lblDupDealNumber" runat="server" Text='<%# Bind("FIMAST") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="DealDate">
                        <ItemTemplate>
                            <asp:Label ID="lblDupDealDate" runat="server" Text='<%# Bind("DealDate") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Buyer">
                        <ItemTemplate>
                            <asp:Label ID="lblDupBuyer" runat="server" Text='<%# Bind("Buyer") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="GrossProfit">
                        <ItemTemplate>
                            <asp:Label ID="lblDupGrossProfit" runat="server" Text='<%# Bind("GrossProfit") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="AmtFinanced">
                        <ItemTemplate>
                            <asp:Label ID="lblDupAmtFinanced" runat="server" Text='<%# Bind("AmtFinanced") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="BankName">
                        <ItemTemplate>
                            <asp:Label ID="lblDupBankName" runat="server" Text='<%# Bind("BankName") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
            <br />
            <asp:Button ID="btnUse" Text="Use" runat="server"></asp:Button>
            <asp:Button ID="btnDiscard" Text="Discard" runat="server" OnClick="btnDiscard_Click" style="display:none"></asp:Button>
            <asp:Label ID="lblMessagePop" runat="server"></asp:Label>
            <br />
        </div>

现在是我用来尝试删除现有记录的代码..

 protected void btnDiscard_Click(object sender, EventArgs e)
        {
            try
            {
                GridViewRow gvr = (GridViewRow)(sender as Control).Parent.Parent;
                string dealnumber = ((Label)gvr.FindControl("lblDupDealNumber")).Text.Trim();

                conn.Open();
                SqlCommand cmdDeleteDup = new SqlCommand("DELETE * FROM Vehicle WHERE FIMAST = @FIMAST", conn);
                cmdDeleteDup.Parameters.AddWithValue("@FIMAST", dealnumber);
                cmdDeleteDup.ExecuteNonQuery();
                conn.Close();

            }
            catch (Exception ex)
            {
                lblMessagePop.Text = ex.ToString();
            }
        }

按钮点击没有触发,我现在知道如何让它工作。我尝试了一些不同的东西,但结果相同。我正在使用一个阅读器来检查记录是否存在,如果它确实有行,我会显示这个弹出窗口。它显示完美,只是我的按钮没有做任何事情。如果这不是解决此问题的正确方法,请告诉我。非常感谢任何指导!

这就是我在 c# 中调用弹出窗口的方式。这有阅读器检查行是否存在,如果存在,它会在弹出窗口中显示现有记录。我使用数据适配器来执行此操作。然后我使用 Page.ClientScript... 打开弹出窗口并显示结果。

SqlDataReader rdr = null;
                SqlCommand cmdCheckExisting = new SqlCommand("SELECT StockNumber, DealDate, Buyer FROM Vehicle WHERE FIMAST = '" + DealNumber + "';", conn);
                rdr = cmdCheckExisting.ExecuteReader();
                if (rdr.HasRows)
                {
                    rdr.Close();
                    DataTable dt = new DataTable();
                    SqlDataAdapter cmdReturnExisting = new SqlDataAdapter("SELECT StockNumber, FIMAST, DealDate, Buyer, GrossProfit, AmtFinanced, BankName FROM Vehicle WHERE FIMAST = '" + DealNumber + "';", conn);
                    cmdReturnExisting.Fill(dt);
                    gvDealTracking.DataSource = dt;
                    gvDealTracking.DataBind();

                    conn.Close();

                    Page.ClientScript.RegisterStartupScript(this.GetType(), "Call my function", "showpopup();", true);
                }

【问题讨论】:

  • 你是不是要触发那个按钮的点击方法?

标签: c# jquery asp.net sql jquery-ui


【解决方案1】:

编辑:尝试从您的 div 中删除“style='display:none'”并将“autoOpen: false”添加到对话框中。那么你的 "showpopup()" 函数唯一需要做的就是调用 "$("#popup").dialog('open');"

$(document).ready(function() {
    $("#popup").dialog({
        modal: true,
        width: 450,
        autoOpen: false,
        open: function(type,data) {
            $(this).parent().appendTo("form");
        }
    });

    $("#popup").each(function() { 
        var popup = $(this); 
        popup.parent().appendTo($("form:first")); 
    });

    function showpopup() {
        $("#popup").dialog("open");
    }
 });

【讨论】:

  • 我试了一下。我删除了 jQuery 按钮,但现在它似乎冻结了。我无法单击任何按钮,甚至无法单击周围的弹出窗口。我在右上角确实有一个“x”,我也无法单击它。可能是什么问题呢?在我的其他尝试中,我遇到了同样的问题,所以我并不完全肯定。感谢您的帮助!
  • 即使没有.. $("#popup").each(function() { var popup = $(this); popup.parent().appendTo($("form:first" )); });按钮出现在表单中,我可以单击它们,然后像​​往常一样移动弹出窗口,但我的按钮不会触发。这是我使用“form:first”的第三次尝试,每次它似乎都“锁定”了页面。这对我来说很奇怪。
  • 试试我的编辑,包括open: function(type,data) { $(this).parent().appendTo("form"); }
  • 也尝试了编辑,仍然是同样的问题。它只是“锁定”了。无法单击任何按钮,退出按钮。这个让我很困惑。
  • 浏览这个:dotnetfunda.com/articles/article99.aspx 我看到&lt;asp:Button&gt; 默认为提交按钮,除非您设置UserSubmitBehavior=false。我之前没有意识到这一点,但是看到因为 LinkBut​​ton 没有提交行为,这可能会有所不同。如果是这样,那么使用普通的&lt;asp:Button UserSubmitBehavior="False" 应该也可以。
【解决方案2】:

我找到了解决方案。我只是将按钮更改为 LinkBut​​tons。出于某种原因,如果将 asp 链接按钮放置在网格视图的外部或内部,一切都会完美运行。这是带有gridview的弹出窗口。

    <script type="text/javascript">
                function showpopup() {
                    $("#popup").dialog({
                        modal: true,
                        width: 590,
                        buttons: {
                            Ok: function () {
                                $(this).dialog("close");
                            }
                        }
                    });
                };
            </script>

             <div class="popUpStyle" title="Duplicate Deal Found!" id="popup" style="display:none">
                <asp:GridView ID="gvDealTracking" runat="server" Width="200px" AutoGenerateColumns="False">
                    <Columns>
                        <asp:TemplateField HeaderText="Stock #" HeaderStyle-Wrap="false">
                            <ItemTemplate>
                                <asp:Label ID="lblDupStockNumber" runat="server" Text='<%# Bind("StockNumber") %>'></asp:Label>
                            </ItemTemplate>
                            <HeaderStyle Wrap="False" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Dealership" SortExpression="Dealership">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Dealership") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Bind("Dealership") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Deal #" HeaderStyle-Wrap="false">
                            <ItemTemplate>
                                <asp:Label ID="lblDupDealNumber" runat="server" Text='<%# Bind("FIMAST") %>'></asp:Label>
                            </ItemTemplate>
                            <HeaderStyle Wrap="False" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="DealDate">
                            <ItemTemplate>
                                <asp:Label ID="lblDupDealDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "DealDate","{0:MM/dd/yyyy}") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Buyer">
                            <ItemTemplate>
                                <asp:Label ID="lblDupBuyer" runat="server" Text='<%# Bind("Buyer") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="GrossProfit">
                            <ItemTemplate>
                                <asp:Label ID="lblDupGrossProfit" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "GrossProfit","{0:n2}") %>'></asp:Label>
                            </ItemTemplate>
                            <ItemStyle HorizontalAlign="Right" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="AmtFinanced">
                            <ItemTemplate>
                                <asp:Label ID="lblDupAmtFinanced" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "AmtFinanced","{0:C}") %>'></asp:Label>
                            </ItemTemplate>
                            <ItemStyle HorizontalAlign="Right" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="BankName">
                            <ItemTemplate>
                                <asp:Label ID="lblDupBankName" runat="server" Text='<%# Bind("BankName") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
                <br />
                 <asp:Button ID="btnUse" runat="server" CausesValidation="false" OnClick="btnUse_Click" UseSubmitBehavior="false" Text="Use"></asp:Button>
<asp:Button ID="lbDelete" runat="server" UseSubmitBehavior="false" CausesValidation="False" OnClick="lbDelete_Click" Text="Delete"></asp:Button>
                 <asp:Label ID="lblMessagePop" runat="server"></asp:Label>
                <br />
            </div>

编辑:感谢 Chad,他指出 asp 按钮默认使用提交行为。在按钮中将 UseSubmitBehavior 选项设置为 false 可以解决此问题。您现在可以在弹出窗口中使用 asp 按钮来调用您的 c# 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多