VB.NET - SQL UpdateCommand para tabla sin clave principal en GridView
-
30-10-2019 - |
Pregunta
1) ¿Cuál es la sintaxis para una consulta de actualización para una tabla sin una clave primaria en VB.NET para una vista de gridview con una casilla de verificación?
Descargo de responsabilidad: frustrantemente, agregar una clave principal no es una opción. Mi programa es un pequeño programa en un sistema mucho más grande con mala gestión de datos. Mi tiempo de desarrollo no incluye reescribir el otro software.
Aquí están las columnas para la tabla donde AgentLeads es la base de datos y mktdtaleads_scrubbed es la tabla:
FROM [AgentLeads].[dbo].[MktDtaLeads_Scrubbed] - [Last Name] ,[First Name],
[Middle Name] ,[Suffix] ,[Address Line 1] ,[Address Line 2] ,[City] ,[ST],
[ZipCode] ,[Email Address] ,[Phone Nbr] ,[Toll Free Nbr] ,[InsertDate] ,
[SentDate] ,[DoNotMail]
El código que tengo en este momento no muestra ningún error, pero no actualiza el campo Donotmail cuando verifica la casilla de verificación a pesar de que muestra el texto "El valor de Donotmail se ha cambiado en la base de datos para el campo seleccionado".
Para el código predeterminado.aspx.vb detrás, agregué:
Public Sub gridview1_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
If e.CommandName = "UpdateDoNotMail" Then
With Me.SqlDataSource1
Dim box As CheckBox = DirectCast(sender, CheckBox)
If box.Checked = True Then
donotmail.SelectedValue = 1
.ConnectionString = ConfigurationManager.AppSettings("AgentLeadsConnectionString").ToString
.UpdateCommand = "UPDATE MktDataLeads_scrubbed set donotmail=@donotmail
WHERE [last name]=@lastname.selectedrow AND [first name]=@firstname.selectedrow AND [Address Line 1]=@Address Line 1.selectedrow"
Else
donotmail.SelectedValue = 0
.ConnectionString = ConfigurationManager.AppSettings("AgentLeadsConnectionString").ToString
.UpdateCommand = "UPDATE MktDataLeads_scrubbed set donotmail=@donotmail
WHERE [last name]=@lastname.selectedrow AND [first name]=@firstname.selectedrow AND [Address Line 1]=@Address Line 1.selectedrow"
End If
End With
End If
End Sub
Aquí está el código para GridView en default.aspx:
<asp:GridView ID="GridView2" runat="server" CellPadding="2"
DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None"
AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Last Name" HeaderText="Last Name"
SortExpression="Last Name" />
<asp:BoundField DataField="First Name" HeaderText="First Name"
SortExpression="First Name" />
<asp:BoundField DataField="Address Line 1" HeaderText="Addr 1"
SortExpression="Address Line 1" />
<asp:BoundField DataField="Address Line 2" HeaderText="Addr 2"
SortExpression="Address Line 2" />
<asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
<asp:BoundField DataField="ST" HeaderText="ST" SortExpression="ST" />
<asp:BoundField DataField="ZipCode" HeaderText="ZipCode"
SortExpression="ZipCode" />
<asp:BoundField DataField="Email Address" HeaderText="Email Addr"
SortExpression="Email Address" />
<asp:BoundField DataField="Phone Nbr" HeaderText="Phone Nbr"
SortExpression="Phone Nbr" />
<asp:TemplateField HeaderText="DoNotMail" SortExpression="DoNotMail">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" CommandName="UpdateDoNotMail" Checked='<%# Bind("DoNotMail") %>'
Enabled="true" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" CommandName="UpdateDoNotMail" Checked='<%# Bind("DoNotMail") %>' />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
2) ¿Es posible hacer una sincronización de dos vías en toda la vista de gridview cuando el usuario presiona un botón para que no tenga que hacer una actualización cada vez que cambia una fila? Porque el usuario puede marcar la casilla y luego marcar otra casilla, luego desmarque una casilla y serían muchas actualizaciones ...
No hay solución correcta