SQLDataSource DeleteCommand, um get-Parameter
Ich habe einige Probleme, die übergabe von Parametern an einen DELETE-Befehl, und kann nicht scheinen, um ein gutes Verständnis, wie es funktioniert.
<asp:SqlDataSource ID="sdsPropertyList"
runat="server"
ProviderName="<%$ appSettings:ProviderName %>"
ConnectionString="<%$ appSettings:ConnectionString %>"
SelectCommand="selPropertyByAcntID"
SelectCommandType="StoredProcedure"
OnSelecting="sdsPropertyList_Selecting"
OnSelected="sdsPropertyList_Selected"
DeleteCommand="delPropertyByPropID"
DeleteCommandType="StoredProcedure"
OnDeleting="sdsPropertyList_Deleting"
OnDeleted="sdsPropertyList_Deleted">
<SelectParameters>
<asp:Parameter Name="in_acntID" Type="Int32" DefaultValue="0" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="in_acntID" Type="Int32" DefaultValue="0" />
<asp:Parameter Name="in_propID" Type="Int32" DefaultValue="0" />
</DeleteParameters>
</asp:SqlDataSource>
<asp:GridView ID="gvProperty" runat="server" DataSourceID="sdsPropertyList"
AutoGenerateColumns="false" CssClass="gvPropList">
<Columns>
<asp:BoundField HeaderText="ID" InsertVisible="true" DataField="prop_id" ReadOnly="true" Visible="False" />
<asp:BoundField HeaderText="Property" DataField="prop_title"
ItemStyle-CssClass="gvPropTitle" >
<ItemStyle CssClass="gvPropTitle" />
</asp:BoundField>
<asp:BoundField HeaderText="Units" DataField="unitCount"
ItemStyle-CssClass="gvUnitCount" >
<ItemStyle CssClass="gvUnitCount" />
</asp:BoundField>
<asp:BoundField DataField="prop_lastmodified" HeaderText="Last Modified"
ItemStyle-CssClass="gvDate" DataFormatString="{0:M/dd/yyyy hh:mm tt}" >
<ItemStyle CssClass="gvDate" />
</asp:BoundField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lbtnEdit" runat="server" CommandName="EditRecord" Text="Edit" CommandArgument='<%# Eval("prop_id") %>'></asp:LinkButton>
<asp:LinkButton ID="lbtnDelete" runat="server" CommandName="Delete" Text="Delete" CommandArgument='<%# Eval("prop_id") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lbtnAdd" runat="server" CommandName="AddRecord" Text="Add" CommandArgument='<%# Eval("prop_id") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="headerPropList"/>
<RowStyle CssClass="gvPropRow" />
</asp:GridView>
protected void sdsPropertyList_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
int userID = Convert.ToInt32(Page.User.Identity.Name);
if (userID != 0)
e.Command.Parameters["in_acntID"].Value = userID;
}
protected void sdsPropertyList_Deleting(object sender, SqlDataSourceCommandEventArgs e)
{
int userID = Convert.ToInt32(Page.User.Identity.Name);
if (userID != 0)
{
e.Command.Parameters["in_acntID"].Value = userID;
}
}
Die SELECT-Anweisung ist unkompliziert, erfordert eine Eingabe-parameter Benutzer-id.
Aber die DELETE-Anweisung, benötigt 2 parameter Eingänge.
in_acntID = userID
in_propID = die boundfield datafield prop_id
Was mache ich falsch? und sollte der CommandName und CommandArgument übergeben werden, in der ItemTemplate-Ebene, wenn ich es an das SqlDataSource-Ebene?
Ich soll die löschen-Schaltfläche, um Folgendes zu erreichen:
- löschen von Datensätzen aus der Tabelle(s) in DB
- entfernen Sie die Zeile aus der gridview
UPDATE
Nach einigen weiteren Recherchen habe ich herausgefunden, dass die NAMEN für Parameter und HeaderText für Boundfield muss die gleiche sein, so dass die Werte innerhalb Ihrer gridview-Steuerelement kann verwendet werden, indem die SQL-Befehle von der datasource.
Mit Ausnahme der anfänglichen select-commant, habe ich alle entfernt der code-behind-Referenzen.
Alles funktioniert corrently jetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entsprechend der MSDN-Dokumentation, müssen Sie die DataKeyNames auf das gridView:
"Verwenden der DataKeyNames-Eigenschaft geben Sie das Feld oder die Felder, welche die Primärschlüssel der Datenquelle. Sie müssen die DataKeyNames-Eigenschaft, damit die automatische update-und delete-Eigenschaften des GridView-Steuerelements zu arbeiten. Die Werte dieser Schlüsselfelder übergeben werden, die Datenquellen-Steuerelement in Reihenfolge zu geben Sie die Zeile aktualisieren oder löschen."
z.B. wenn die id wurde in einem Listenfeld oder dropdown -
habe ich die oben erfolgreich zum löschen . dies könnte arbeiten für Textfelder oder labels. Wenn Sie der Verarbeitung des Ereignisses , warum nicht einfach der gesamte Prozess löschen, um die selbst-handler ? Geben Sie die gesamte sql-setup einschließlich Verbindungs -, Befehls-Ausführung . Diese Methode hat auch für mich gearbeitet .
Nach einigen weiteren Recherchen habe ich herausgefunden, dass die NAMEN für Parameter und HeaderText für Boundfield muss die gleiche sein, so dass die Werte innerhalb Ihrer gridview-Steuerelement kann verwendet werden, indem die SQL-Befehle von der datasource.
Mit Ausnahme der anfänglichen select-commant, habe ich alle entfernt der code-behind-Referenzen.
Alles funktioniert corrently jetzt.