有很多關於這個問題,但我還沒有能夠解決我的問題,使用任何一個答案(經過許多次嘗試..)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