2013-08-26 331 views
1

所以我有一個新的要求,對我來說很棘手,我目前無法弄清楚。我正在使用gridview來插入和更新數據。我的要求之一是當用戶手動添加新記錄時,如果存在相同的「交易編號」,則顯示彈出窗口。這彈出應該顯示已經存在的記錄。他們應該能夠點擊3個「使用」,「丟棄」或「確定」按鈕中的1個。 「使用」按鈕基本上會關閉彈出窗口並清除用戶輸入的文本框。「放棄」按鈕必須刪除存在的記錄,以便用戶可以使用相同的處理編號插入新記錄。原因是因爲交易編號是發生「交易」的最獨特的編號。通過我們從舊應用程序導出到新應用程序的方式,可以下載重複項,有時候會有一些信息比第一次導出時有更多的信息。這就是爲什麼我必須添加一個要求,讓用戶選擇要保留的記錄。我希望這對大家都有意義。我已經幹了一些事情,但這是我現在擁有的東西,而且我堅持不懈。使用jQuery從數據庫中的表中刪除重複條目

的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); 
       } 
+0

你是否試圖觸發該按鈕的點擊方法? –

回答

0

我找到了解決方案。我只是將按鈕更改爲LinkBut​​tons。出於某種原因,如果asp鏈接按鈕位於gridview之外或之內,一切都可以正常工作。這裏是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> 

編輯:感謝乍得,他指出,asp按鈕默認使用提交行爲。在按鈕中將UseSubmitBehavior選項設置爲false可解決問題。您現在可以在彈出窗口中使用asp按鈕來調用您的c#方法。

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"); 
    } 
}); 
+0

我給了這個鏡頭。我刪除了jQuery按鈕,但現在它似乎凍結。我無法點擊任何按鈕或甚至更多的彈出。我在右上角有一個「x」,我也無法點擊它。可能是什麼問題呢?在我的其他嘗試中,我遇到了同樣的問題,所以我不完全積極。感謝您的幫助! – Humpy

+0

即使沒有.. $(「#popup」)。每個(function(){popup} = $(this); popup.parent()。appendTo($(「form:first」)); });按鈕出現在窗體中,我可以點擊它們,並像正常一樣移動彈出窗口,但是我的按鈕不會觸發。這是關於第三次嘗試,我已經使用「form:first」,並且每次都似乎「鎖定」頁面。我很奇怪。 – Humpy

+0

嘗試我的編輯,其中包含'open:function(type,data){(this).parent()。appendTo(「form」); }' – Tricky12

相關問題