Есть много вопросов по этому поводу, но я не смог решить свою проблему, используя ответы на какие-либо из них (после многих, многих попыток ..)
Я работаю в vb.создание веб-приложения asp.net.У меня есть SqlDataSource и GridView на моей странице.
Я хочу изменить логическое значение DoNotMail, представленное флажком Gridview, и автоматически обновлять в базе данных, если флажок установлен с 0 (False, Will Mail) на 1 (True, Wothing Mail).код, который я использовал.
Для кода default.aspx.vb я добавил:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
lastname.Focus()
If Page.IsPostBack Then
Response.Write("The DoNotMail value has been changed in the database for the selected field")
End If
End Sub
Public Sub checkbox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
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"
Else
donotmail.SelectedValue = 0
.ConnectionString = ConfigurationManager.AppSettings("AgentLeadsConnectionString").ToString
.UpdateCommand = "UPDATE MktDataLeads_scrubbed set donotmail=@donotmail"
End If
End With
End Sub
Для страницы default.aspx я добавил:
<asp:TemplateField HeaderText="DoNotMail" SortExpression="DoNotMail">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox1_CheckedChanged" Checked='<%# Bind("DoNotMail") %>'
Enabled="true" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox1_CheckedChanged" Checked='<%# Bind("DoNotMail") %>' />
</EditItemTemplate>
</asp:TemplateField>
1) ЯЯ почти уверен, что мой синтаксис в команде update неправильный в разделе кода по умолчанию.Кто-нибудь знает правильный синтаксис?
2) Я получаю сообщение об ошибке: Когда я добавляю «Handles CheckBox1.CheckedChanged» под разделом кода, CheckBox1 подчеркивается и получает следующую ошибку: «Для предложения Handles требуется переменная WithEvents, определенная всодержащий тип или один из его базовых типов ".Как мне избавиться от этого?Я просто удалил строку и запустил код без нее.3) После установки флажка «текст DoNotMail был изменен в базе данных для выбранного поля» текст отображается в верхней части страницы, но если я перезапущу поиск для donotmail = 1, запись не отображаетсявверх, потому что он никогда не обновлялся с новым значением.
Я довольно тупой.Кто-нибудь может помочь?Было бы очень признателен:)
Спасибо за ответ Ник!Оператор UPDATE не будет работать, потому что в нем нет предложения WHERE.Он обновит всю таблицу как есть.Там нет первичного ключа для таблицы.Вот столбцы для таблицы FROM [AgentLeads]. [Dbo]. [MktDtaLeads_Scrubbed] - [Фамилия], [Имя], [Отчество], [Суффикс], [Адресная строка 1], [Адресная строка 2], [Город], [ST], [ZipCode], [Адрес электронной почты], [Телефон Nbr], [Бесплатный бесплатный Nbr], [InsertDate], [SentDate], [DoNotMail]
Где AgentLeads - этобазы данных и MktDtaLeads_Scrubbed является таблицей.Как мне указать строку?Итак, я бы поставил:
.UpdateCommand = "ОБНОВИТЬ MktDataLeads_scrubbed set donotmail = @ donotmail" ГДЕ [фамилия] = @ lastname.selectedrow AND [имя] = @ firstname.selectedrow AND [Адресная строка 1] =@ Адресная строка 1.selectedrow
Можно ли выполнить двухстороннюю синхронизацию для всего вида сетки, когда пользователь нажимает кнопку, чтобы вам не приходилось обновлять каждый раз при изменении строки?потому что пользователь может установить флажок, а затем установить другой флажок, затем снять флажок, и будет много обновлений ...