VB.net - сделать флажок Gridview обновить логическое поле в базе данных - PullRequest
1 голос
/ 21 ноября 2010

Есть много вопросов по этому поводу, но я не смог решить свою проблему, используя ответы на какие-либо из них (после многих, многих попыток ..)

Я работаю в vb.создание веб-приложения asp.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).

Вот мой CodeBehind:

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

Как вы видите, я игралс WithEvents, но это, похоже, не помогло.В приведенном выше коде все, что я пытался получить, - это какая-то реакция на нажатие флажка, но ничего не происходит (без ошибок).

Я довольно озадачен.Кто-нибудь может помочь?Буду очень признателен:)

Ответы [ 3 ]

1 голос
/ 21 ноября 2010

После долгих недоразумений я получил следующий код в файле aspx:

<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>

... и это в CodeBehind:

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

... который срабатывает правильно при нажатии каждого флажка. Теперь, чтобы заставить их сделать что-то полезное ...

0 голосов
/ 07 февраля 2011

Ошибка: когда я добавляю «Handles CheckBox1.CheckedChanged» под разделом кода, CheckBox1 подчеркивается и получает следующую ошибку: «Для предложения Handles требуется переменная WithEvents, определенная в содержащем типе или одном из его базовых типов». Как мне избавиться от этого? Я просто удалил строку и запустил код без нее.

Чтобы изменить логическое значение 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() //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>
0 голосов
/ 21 ноября 2010

Изменение

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 в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...