2010-11-21 14 views
1

これについて多くの質問がありますが、私は何かの答えを使用して問題を解決できませんでした(多くの、多くの試行後..)VB.net - Gridviewチェックボックスを更新するデータベースのブール値フィールド

私はasp.net Webアプリケーションを作成するvb.netで作業しています。私は自分のページにSqlDataSourceコントロールとGridViewコントロールを持っている:

<asp:SqlDataSource ID="msgUnread" runat="server" 
ConnectionString="<%$ ConnectionStrings:edinsec %>" 

SelectCommand="SELECT [msgdate], [email], [name], [message], [readit] FROM [messages]" 
UpdateCommand="UPDATE messages SET readit = 'True' WHERE (msgid = @msgid)"> 
     <UpdateParameters> 
    <asp:Parameter Name="msgid" /> 
</UpdateParameters> 
    </asp:SqlDataSource> 


    <asp:GridView ID="unreadMessages" runat="server" AutoGenerateColumns="False" 
BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" 
CellPadding="3" DataSourceID="msgUnread"> 
<RowStyle ForeColor="#000066" /> 
<Columns> 
    <asp:BoundField DataField="msgdate" HeaderText="Date &amp; time" 
     SortExpression="msgdate" /> 
    <asp:BoundField DataField="email" HeaderText="Email" 
     SortExpression="email" /> 
    <asp:BoundField DataField="name" HeaderText="Name" SortExpression="name" /> 
       <asp:TemplateField HeaderText="Mark as read" SortExpression="readit"> 
     <%--<EditItemTemplate> 
      <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("readit") %>' OnCheckedChange="CheckBox1_CheckedChanged" /> 
     </EditItemTemplate>--%> 
     <ItemTemplate> 
      <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("readit") %>' OnCheckChanged="CheckBox1_CheckedChanged" AutoPostBack="true"/> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 
<FooterStyle BackColor="White" ForeColor="#000066" /> 
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" /> 
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /> 
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /> 
    </asp:GridView> 

GridViewのは、チェックボックス(readit 『フィールドビットフィールド、すなわちブールある値が適切に)表示されている』で、適切に移入されます。チェックボックスをクリックすると、データベースのブール値を更新するスクリプトを取得しようとしています。現時点では、スクリプトをクリック(MsgBoxさえも)に反応させることさえできません。あなたは私がWITHEVENTSで遊んでいたが、それは助けていないようでした見ることができるように

Public Partial Class enqur 
Inherits System.Web.UI.Page 
WithEvents CheckBox1 As CheckBox 


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

End Sub 

Public Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) 
    MsgBox("test") 
End Sub 

End Class 

は、ここに私の分離コードです。私が取得しようとしていた上記のコードでは、チェックボックスのクリックに対する何らかの反応がありましたが、何も起こりません(どちらもエラーなし)。

私はかなり困惑しています。誰も助けることができますか?はるかに高く評価されるだろう:)

答えて

1

各チェックボックスをクリックします。今度は便利なものにするために...

0

変更

Public Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) 

Public Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles CheckBox1.CheckedChange 

に基本的には最後にハンドルをCheckBox1.CheckedChange忘れてしまいました。

<asp:TemplateField HeaderText="readit" SortExpression="readit"> 
    <ItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox_CheckedChanged" Checked='<%# Bind("readit") %>' 
      Enabled="true" /> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox_CheckedChanged" Checked='<%# Bind("readit") %>' /> 
    </EditItemTemplate> 
     </asp:TemplateField> 

...と、この分離コードで:

Public Sub checkbox_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) 'Handles checkbox.CheckedChanged 
    Dim box As CheckBox = DirectCast(sender, CheckBox) 



    If box.Checked = True Then 
    MsgBox("checked!") 
    Else 
    MsgBox("unchecked!") 
    End If 



End Sub 

...上で適切に発射するくらい私はASPXファイルにこのコードで終わっについてfaffing後

+0

感謝。私はまだ私はフィードバックを取得しないことを追加する - MsgBoxが動作していない:( – melat0nin

0

エラー:コードビハインドセクションの下に "Handles CheckBox1.CheckedChanged"を追加すると、CheckBox1に下線が引かれ、次のエラーが発生します。 "Handles句には、WithEvents変数がまたはその基本型の1つ」を含む。どのように私はそれを取り除くのですか?私はその行を削除して、それを使わずにコードを実行しました。

Gridviewチェックボックスで表されるDoNotMailブール値を変更し、チェックボックスが0(False、Will Mail)から1(True、Will not Mail)にチェックされている場合、データベースで自動的に更新するには、 。私の後ろにdefault.aspx.vbコードの場合

が追加さ:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    lastname.Focus() //sets the focus on the last name text box 
    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) 
    Dim box As CheckBox = DirectCast(sender, CheckBox) 
    If box.Checked = True Then 
     donotmail.SelectedValue = 1 
    Else 
     donotmail.SelectedValue = 0 
    End If 


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> 
関連する問題