所以我有一个对我来说很棘手的新要求,到目前为止我无法弄清楚。我正在使用 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);
}