asp.net vb.net gridview sql-server-2012 sqldatasource

asp.net - La fuente de datos ''SqlDataSource1'' no admite el borrado a menos que se especifique DeleteCommand



vb.net gridview (5)

Tengo un enlace de botón ASP en GridView1 que debería eliminar un elemento de una tabla db al hacer clic, y aparece este mensaje de error:

Deleting is not supported by data source ''SqlDataSource1'' unless DeleteCommand is specified.

Este es el código:

VB.NET

Protected Sub GridView1_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GridView1.RowCommand If e.CommandName.Equals("Delete") Then Dim rowIndex As Integer = Convert.ToInt32(e.CommandArgument) Dim rowID As String = e.CommandArgument.ToString() Dim conn As New SqlConnection("Data Source=BRIAN-PC/SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True;") Dim cmd As New SqlCommand("DELETE content WHERE content_id=@rowID", conn) cmd.Parameters.AddWithValue("@rowID", rowID) conn.Open() cmd.ExecuteNonQuery() conn.Close() End If End Sub

ÁSPID

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" ViewStateMode="Enabled"> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> <Columns> <asp:BoundField DataField="content_name" HeaderText="Content Name" SortExpression="content_name"> </asp:BoundField> <asp:BoundField DataField="content_type" HeaderText="Content Type" SortExpression="content_type"> </asp:BoundField> <asp:buttonfield buttontype="Link" commandname="Delete" text="Delete"> <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> </asp:buttonfield> <asp:TemplateField HeaderText=" "> <ItemTemplate> <asp:LinkButton ID="lnkDownload" runat="server" Text="Download" OnClick="lnkDownload_Click" ></asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> <EditRowStyle BackColor="#999999" /> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <SortedAscendingCellStyle BackColor="#E9E7E2" /> <SortedAscendingHeaderStyle BackColor="#506C8C" /> <SortedDescendingCellStyle BackColor="#FFFDF8" /> <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> </asp:GridView>

Según lo que leí, debe especificar un comando DELETE para SQLDataSource1 .

¿Cómo hago eso en mi caso?


Debes ingresar el código asp:

<asp:ButtonColumn CommandName="Delete" Text="Delete"></asp:ButtonColumn>

sinceramente.


si lo cambia a algo así como ... CommandName="DeleteRow" o algo así ... y luego cámbielo a if(e.CommandName == "DeleteRow") evitará ese problema.


Solo una respuesta rápida sobre cómo hice esto.

Si selecciona "ShowDeleteButton" debajo de las propiedades del campo de comando del campo Seleccionar, "Eliminar" se mostrará a la izquierda de cada fila en la vista de cuadrícula. Sin embargo, cuando lo hace, existe la expectativa de que el origen de datos sql tendrá un comando de eliminación. Si no, obtienes el desagradable mensaje sobre el comando de eliminación no especificado.

Como quería que BusinessObject manejara la fuente de datos delete en lugar de sql, utilicé la selección, al igual que para seleccionar una fila, luego cambié el "SelectText" en las propiedades del campo de comando para decir "Eliminar". Eso me permitió usar el evento RowCommand para atrapar la acción de eliminación. A partir de ahí, simplemente agarré la información de la fila que necesitaba y se la pasé al objeto comercial para la eliminación.

Tenga en cuenta que cuando lo hace de esa manera, CommandName sigue siendo "Seleccionar" aunque el texto del comando sea "Eliminar". Entonces, verifica lo siguiente:

if (e.CommandName.ToString() == "Select")

Espero que ayude a alguien. ¡Buena suerte!


Este error se produce debido a que escribe el nombre de comando delete. entonces escribes algo como Delete Record. y cuando usa SQLDataSource, ese comando de tiempo no debe ser igual que eliminar o actualizar. Por favor use un nombre alternativo.


necesitas cambiarlo a algo Else Like

<asp:buttonfield buttontype="Link" commandname="Del" text="Delete">

y luego cámbielo a (e.CommandName == "Del") porque "DELETE" reservado a SQlDataSource Control