2010-11-21 16 views
1

Orada bu konuda birçok soru vardır ama bunların hiçbirini cevaplarını kullanarak sorunu çözmek mümkün değil ettik (birçok, birçok denemeden sonra ..)VB.net - veritabanında Gridview onay kutusu güncelleme mantıksal bir alan yapmak

Bir ASP.NET web uygulaması oluşturma vb.net çalışıyorum. Bir SqlDataSource ve benim sayfasında bir GridView vardır: GridView onay kutularındaki işaretleri ile düzgün doldurulur

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

değerleri düzgün görüntülenmesini ('ReaDit' alanı biraz tarla, yani boolean). Komut dosyası, onay kutusu tıklandığında veritabanındaki boolean değerini güncellemeye çalışıyorum. Şu anda bir betiğe (bir MsgBox bile değil) tepki vermek için bile senaryoyu alamıyorum. Eğer ben WithEvents ile oynuyordum ama bu yardım görünmüyordu görebileceğiniz gibi

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 

:

İşte benim CodeBehind bu. Yukarıdaki kodda elde etmeye çalıştığım tek şey bir onay kutusunun tıklanmasıyla ilgili bir çeşit tepkiydi - ama hiçbir şey olmuyor (ya da hata yok).

Çok şaşırdım. Biri yardım edebilir mi? çok takdir :)

cevap

1

çok ben aspx dosyasında bu kodun ile sona erdi yaklaşık faffing sonra:

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 

... düzgün ateşler: codebehind bu

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

... ve her onay kutusunun tıklanması. Şimdi yararlı bir şey yapmak için ...

0

Değişim

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 

için Temelde sonunda Kolları CheckBox1.CheckedChange unuttum.

+0

teşekkür. Bunu eklediğimde hala herhangi bir geri bildirim alamıyorum - MsgBox çalışmıyor :( – melat0nin

0

Hata: "CheckBox1.CheckedChanged" altındaki arka bölümün altında "CheckBox1.CheckedChanged" eklediğimde, CheckBox1 altı çizili ve aşağıdaki hatayı alır: "Handles yan tümce tümcesinde tanımlanan bir WithEvents değişkeni gerektirir. türünü veya taban türlerini içeren ". Bundan nasıl kurtulurum? Sadece satırı sildim ve kodu onsuz çalıştı.

Bir Gridview onay kutusu tarafından temsil edilen DoNotMail boolean değerini değiştirmek ve onay kutusu 0'dan (False, Will Mail) 1'e (True, Mail değil) işaretliyse, veritabanında otomatik olarak güncelleştirmek için kullandığım kod . I arkasında Default.aspx.vb kodu için

ekledi:

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 

ekledim default.aspx sayfası için: cevap için

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