有很多关于这个问题,但我还没有能够解决我的问题,使用任何一个答案(经过许多次尝试..)VB.net - 使GridView复选框字段更新数据库中的布尔型字段
我正在vb.net中创建一个asp.net web应用程序。我的页面上有一个SqlDataSource和一个GridView。
我想更改由Gridview复选框表示的DoNotMail布尔值并在数据库中自动更新,如果复选框从0(False,Will Mail)复选到1(True,Will 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 [email protected]"
Else
donotmail.SelectedValue = 0
.ConnectionString = ConfigurationManager.AppSettings("AgentLeadsConnectionString").ToString
.UpdateCommand = "UPDATE MktDataLeads_scrubbed set [email protected]"
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)我敢肯定,我的语法上的更新命令是不正确的默认代码隐藏部分。有谁知道正确的语法?
2)我得到错误:当我在代码后面的代码段中添加“Handles CheckBox1.CheckedChanged”时,CheckBox1被加下划线并得到以下错误:“句柄子句需要在包含类型或其基础中定义的WithEvents变量类型”。我该如何摆脱?我刚刚删除了该行并在没有它的情况下运行了代码。 3)点击复选框后,“数据库中所选字段的DoNotMail值已更改”文本显示在页面顶部,但是如果我重新运行搜索donotmail = 1,则记录不会因为它从来没有被新的价值更新过。
我很难过。谁能帮忙?这将非常感谢:)
感谢您的答复尼克! UPDATE语句不起作用B/C它没有WHERE子句。它会按原样更新整个表格。这个表没有主键。这里是表格FROM [AgentLeads]。[dbo]。[MktDtaLeads_Scrubbed] - [Last Name],[First Name],[Middle Name],[Suffix],[Address Line 1],[Address Line 2] [城市],[ST],[邮编],[电子邮件地址],[电话树木包],[免费电话树木包],[InsertDate],[SentDate],[DoNotMail]
哪里AgentLeads是数据库和MktDtaLeads_Scrubbed是表格。我如何指定行?所以我会说:
.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
当用户点击一个按钮时,是否可以在整个gridview上进行双向同步,因此每次更改某行时都不必进行更新?因为用户可以选中该复选框,然后选中另一箱则取消一个盒子里,将是一个很大的更新...
UPDATE语句不起作用b/c它没有WHERE子句。它会按原样更新整个表格。这个表没有主键。以下是表格的字段:SELECT [Last Name],[First Name],[Middle Name],[Suffix],[Address Line 1],[Address Line 2],[City],[ST],[ZipCode ],[电子邮件地址],[电话号码],[免费号码],[插入日期],[发送日期],[DoNotMail] FROM [AgentLeads]。[dbo]。[MktDtaLeads_Scrubbed] – 2011-02-08 13:27:54