Click here to Skip to main content
15,929,811 members
Home / Discussions / Visual Basic
   

Visual Basic

 
GeneralRe: How can I hide a column value from view in my Datagrid Pin
Lisana7-Mar-05 10:36
Lisana7-Mar-05 10:36 
GeneralRe: How can I hide a column value from view in my Datagrid Pin
Jim Matthews8-Mar-05 7:05
Jim Matthews8-Mar-05 7:05 
GeneralRe: How can I hide a column value from view in my Datagrid Pin
Lisana8-Mar-05 10:47
Lisana8-Mar-05 10:47 
GeneralRe: How can I hide a column value from view in my Datagrid Pin
Anonymous9-Mar-05 20:44
Anonymous9-Mar-05 20:44 
AnswerRe: How can I hide a column value from view in my Datagrid Pin
westerdlyOne_void8-Mar-05 10:46
westerdlyOne_void8-Mar-05 10:46 
QuestionHow to access serial Com Port 1 for ASP.net / VB.NEt Pin
Member 11682817-Mar-05 4:55
Member 11682817-Mar-05 4:55 
AnswerRe: How to access serial Com Port 1 for ASP.net / VB.NEt Pin
Dave Kreskowiak7-Mar-05 7:07
mveDave Kreskowiak7-Mar-05 7:07 
General[ASP.NET / VB.NET] using Page Templates disables DataGrid events Pin
Mastakilla1237-Mar-05 0:57
Mastakilla1237-Mar-05 0:57 
Hi all

I have been lookin more then 3 days for a solution for my problem...

Allthough i did progress in finding out what causes the problems, I dont have any clue what the solution might be...

I really hope someone here can help me out
THX AHEAD

the problem is the following:

I have made a web user control containing a DataGrid for editing a MS SQL table. It uses the DataGrid's OnSortCommand, OnEditCommand, OnUpdateCommand, OnCancelCommand, and it all works very nicely

BUT, when i try to integrate this web user control in my big project (a webportal) it stopped working and started acting really strange

after looots of searching and debugging this is what i found out:

When i integrate it in the portal, i let my web user control inherit ControlBase.vb instead of System.Web.UI.UserControl... ControlBase.vb itself inherits System.Web.UI.UserControl, so that should normally work

I got this ControlBase.vb technique out of an article on www.smartisans.com about "Creating a Visual Web Page Template" which u can find here: http://www.smartisans.com/articles/vb_templates.aspx

After looking futher i noticed that it is the Page_PreRender function in ControlBase.vb that cause my problems... when i comment this function out, everything works perfect again...

while debugging i noticed the folowing when the Page_PreRender function is included:

When loading the page the first time, it still works like it should... Page_Load in my web user control gets called, and since IsPostBack is false, a bindgrid() is done...

but when clicking one of the links in my datagrid, it goes wrong... The Page_Load function still gets called, but since IsPostBack is true this time, nothing is done... After this, NORMALLY, the event of link i clicked should be called (fe: the OnEditCommand event), but it aint called at all... so nothing happens, and my page remains empty... Frown | :(

After lots of trying i also noticed some strange things:
When doing a BindGrid() in Page_Load (even when IsPostBack is true), the events do get called, but things still get f***ed up, since no bindgrid() is needed then, the dataset gets filled twice, and even when including a dataset.clear() things still dont work as expected when sorting if a collumn is in editmode

Also i noticed the Page_PreRender function gets called twice every time

I hope someone has idea why all these strange things are happening to me, cause i dont... Frown | :(
EVERYTHING works PERFECT without the Page_PreRender, and i just cant get it working with it... (and i need the Page_PreRender for the nice Page Template technique i guess?)

somehow, somewhere the events just get lost.....

below u can find the structure of my solution WITH the page template (the one that doesnt work, just change "inherits ControlBase" to "inherits System.Web.UI.UserControl" to see it working, ull also need a working iis and an sql server with 1 table)

solution structure
solution:                                afdedit<br />
   project (asp.net web application):    afdedit<br />
      webform:                           default.aspx<br />
      web user control:                  afdedit.ascx<br />
   project (class library):              test<br />
      klasse:                            ControlBase.vb


and below all the code:

default.aspx
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="afdedit.WebForm1"%><br />
<%@ Register TagPrefix="VAB" TagName="afdedit" Src="afdedit.ascx" %><br />
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><br />
<HTML><br />
	<HEAD><br />
		<title>WebForm1</title><br />
		<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"><br />
		<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1"><br />
		<meta name="vs_defaultClientScript" content="JavaScript"><br />
		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"><br />
	</HEAD><br />
	<body MS_POSITIONING="GridLayout"><br />
		<form id="Form1" method="post" runat="server"><br />
			<VAB:afdedit runat="server" ID="afdedit" NAME="afdedit"></VAB:afdedit><br />
		</form><br />
	</body><br />
</HTML>


default.aspx.vb
Imports test<br />
<br />
Public Class WebForm1<br />
    Inherits System.Web.UI.Page<br />
<br />
#Region " Web Form Designer Generated Code "<br />
<br />
    'This call is required by the Web Form Designer.<br />
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()<br />
<br />
    End Sub<br />
<br />
    'NOTE: The following placeholder declaration is required by the Web Form Designer.<br />
    'Do not delete or move it.<br />
    Private designerPlaceholderDeclaration As System.Object<br />
<br />
    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init<br />
        'CODEGEN: This method call is required by the Web Form Designer<br />
        'Do not modify it using the code editor.<br />
        InitializeComponent()<br />
    End Sub<br />
<br />
#End Region<br />
<br />
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br />
        'Put user code to initialize the page here<br />
    End Sub<br />
<br />
End Class


afdedit.ascx
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="afdedit.ascx.vb" Inherits="afdedit.afdedit" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %><br />
<DIV id="divAfdeling" align="center" runat="server"><br />
	<asp:DataGrid id="DG" DataKeyField="afdelingid" AutoGenerateColumns="False" runat="server" AllowSorting="True"<br />
		OnSortCommand="DG_sort" OnUpdateCommand="DG_Update" OnCancelCommand="DG_Cancel" OnEditCommand="DG_Edit"<br />
		GridLines="Vertical" AlternatingItemStyle-BorderColor="#000000" AlternatingItemStyle-BackColor="LightGrey"<br />
		ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle" CellPadding="7"><br />
		<AlternatingItemStyle HorizontalAlign="Center" BorderColor="Black" VerticalAlign="Middle" BackColor="White"></AlternatingItemStyle><br />
		<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" BackColor="#CAC7A8"></ItemStyle><br />
		<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="Gray"></HeaderStyle><br />
		<Columns><br />
			<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"></asp:EditCommandColumn><br />
			<asp:BoundColumn Visible="False" DataField="afdelingid" SortExpression="afdelingid" ReadOnly="True"<br />
				HeaderText="Afdeling ID"></asp:BoundColumn><br />
			<asp:BoundColumn DataField="naam" SortExpression="naam" ReadOnly="True" HeaderText="Naam"></asp:BoundColumn><br />
			<asp:BoundColumn DataField="omschrijving" SortExpression="omschrijving" HeaderText="Omschrijving"></asp:BoundColumn><br />
			<asp:BoundColumn DataField="url" SortExpression="url" HeaderText="Url"></asp:BoundColumn><br />
		</Columns><br />
		<PagerStyle VerticalAlign="Middle" HorizontalAlign="Center"></PagerStyle><br />
	</asp:DataGrid><br />
</DIV>


afdedit.ascx.vb
Public Class afdedit<br />
    Inherits ControlBase<br />
<br />
#Region " Web Form Designer Generated Code "<br />
<br />
    'This call is required by the Web Form Designer.<br />
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()<br />
        Me.Conn = New System.Data.SqlClient.SqlConnection<br />
        Me.DA = New System.Data.SqlClient.SqlDataAdapter<br />
        Me.SelComm = New System.Data.SqlClient.SqlCommand<br />
        Me.UpdComm = New System.Data.SqlClient.SqlCommand<br />
        Me.DS = New System.Data.DataSet<br />
        Me.DV = New System.Data.DataView<br />
        Me.DT = New System.Data.DataTable<br />
        CType(Me.DS, System.ComponentModel.ISupportInitialize).BeginInit()<br />
        CType(Me.DV, System.ComponentModel.ISupportInitialize).BeginInit()<br />
        CType(Me.DT, System.ComponentModel.ISupportInitialize).BeginInit()<br />
        '<br />
        'Conn<br />
        '<br />
        Me.Conn.ConnectionString = "server=SHAREPOINT;Database=Intranet;uid=sa;pwd=VAB7vtb5$"<br />
        '<br />
        'DA<br />
        '<br />
        Me.DA.SelectCommand = Me.SelComm<br />
        Me.DA.UpdateCommand = Me.UpdComm<br />
        '<br />
        'SelComm<br />
        '<br />
        Me.SelComm.CommandText = "SELECT afdelingid, naam, omschrijving, url FROM Afdelingen"<br />
        Me.SelComm.Connection = Me.Conn<br />
        '<br />
        'UpdComm<br />
        '<br />
        Me.UpdComm.CommandText = "UPDATE Afdelingen SET naam = @naam, omschrijving = @omschrijving, url = @url WHER" & _<br />
        "E (afdelingid = @afdelingid); SELECT naam, omschrijving, url, afdelingid FROM Af" & _<br />
        "delingen WHERE (afdelingid = @afdelingid)"<br />
        Me.UpdComm.Connection = Me.Conn<br />
        Me.UpdComm.Parameters.Add(New System.Data.SqlClient.SqlParameter("@afdelingid", System.Data.SqlDbType.Int, 4, "afdelingid"))<br />
        Me.UpdComm.Parameters.Add(New System.Data.SqlClient.SqlParameter("@naam", System.Data.SqlDbType.VarChar, 100, "naam"))<br />
        Me.UpdComm.Parameters.Add(New System.Data.SqlClient.SqlParameter("@omschrijving", System.Data.SqlDbType.VarChar, 100, "omschrijving"))<br />
        Me.UpdComm.Parameters.Add(New System.Data.SqlClient.SqlParameter("@url", System.Data.SqlDbType.VarChar, 100, "url"))<br />
        '<br />
        'DS<br />
        '<br />
        Me.DS.DataSetName = "DataS"<br />
        Me.DS.Locale = New System.Globalization.CultureInfo("nl-BE")<br />
        '<br />
        'DT<br />
        '<br />
        Me.DT.TableName = "afdelingen"<br />
        CType(Me.DS, System.ComponentModel.ISupportInitialize).EndInit()<br />
        CType(Me.DV, System.ComponentModel.ISupportInitialize).EndInit()<br />
        CType(Me.DT, System.ComponentModel.ISupportInitialize).EndInit()<br />
<br />
    End Sub<br />
    Protected WithEvents DG As System.Web.UI.WebControls.DataGrid<br />
    Protected WithEvents DA As System.Data.SqlClient.SqlDataAdapter<br />
    Protected WithEvents DS As System.Data.DataSet<br />
    Protected WithEvents DV As System.Data.DataView<br />
    Protected WithEvents DT As System.Data.DataTable<br />
    Protected WithEvents Conn As System.Data.SqlClient.SqlConnection<br />
    Protected WithEvents SelComm As System.Data.SqlClient.SqlCommand<br />
    Protected WithEvents UpdComm As System.Data.SqlClient.SqlCommand<br />
    Protected WithEvents divAfdeling As System.Web.UI.HtmlControls.HtmlGenericControl<br />
<br />
    'NOTE: The following placeholder declaration is required by the Web Form Designer.<br />
    'Do not delete or move it.<br />
    Private designerPlaceholderDeclaration As System.Object<br />
<br />
    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init<br />
        'CODEGEN: This method call is required by the Web Form Designer<br />
        'Do not modify it using the code editor.<br />
        InitializeComponent()<br />
    End Sub<br />
<br />
#End Region<br />
<br />
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br />
        'Put user code to initialize the page here<br />
        If Not IsPostBack Then<br />
            Session("EditID") = -1<br />
            Session("Direction") = " ASC"<br />
            Session("SortField") = "naam"<br />
            BindGrid()<br />
        End If<br />
    End Sub<br />
<br />
    ' Sorteren op een bepaalde kolom door kolomhoofding aan te klikken<br />
    Public Sub DG_sort(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles DG.SortCommand<br />
        ' Als een rij in "edit-modus" is<br />
        If DG.EditItemIndex <> -1 Then<br />
            FindEditPosKey()<br />
        End If<br />
        ' Als er geklikt is op de kolom waarop al gesorteerd is<br />
        If CType(Session("SortField"), String) = e.SortExpression Then<br />
            ' Indien oplopend wordt gesorteerd, aflopend sorteren, en analoog andersom<br />
            If CType(Session("Direction"), String) = " ASC" Then<br />
                Session("Direction") = " DESC"<br />
            Else<br />
                Session("Direction") = " ASC"<br />
            End If<br />
        Else<br />
            Session("Direction") = " ASC"<br />
        End If<br />
        ' Kolom onthouden waarop gesorteerd wordt<br />
        Session("SortField") = e.SortExpression<br />
        BindGrid()<br />
    End Sub<br />
<br />
    ' Edit-layout voor een bepaalde rij activeren<br />
    Public Sub DG_Edit(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DG.EditCommand<br />
        DG.EditItemIndex = e.Item.ItemIndex<br />
        BindGrid()<br />
    End Sub<br />
<br />
    ' Updaten van een gewijzigde rij<br />
    Public Sub DG_update(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DG.UpdateCommand<br />
        ' definieren van de textboxes gecreeerd door de edit-layout te openen voor een rij<br />
        Dim tb_omschrijving As TextBox = CType(e.Item.Cells(3).Controls(0), TextBox)<br />
        Dim tb_url As TextBox = CType(e.Item.Cells(4).Controls(0), TextBox)<br />
        ' vastleggen van alle cellen van de te wijzigen rij<br />
        Dim afdelingid As Integer = CInt(e.Item.Cells(1).Text)<br />
        Dim naam As String = e.Item.Cells(2).Text<br />
        Dim omschrijving As String = tb_omschrijving.Text<br />
        Dim url As String = tb_url.Text<br />
        If omschrijving.Length = 0 Or omschrijving.Length > 30 Or Not Geen_SQL_Injection(omschrijving) Then<br />
            ' invoercontrole van omschrijving<br />
            Fout("Ongeldige omschrijving... De omschrijving moet minstens 1 teken en mag maximum 29 tekens zijn... " & _<br />
                "Volgende tekens zijn niet toegelaten: ', "", *, <, >")<br />
        ElseIf url.Length < 8 Then<br />
            ' invoercontrole van url<br />
            Fout("Ongeldige URL... Een URL begint met 'http://'...")<br />
        ElseIf url.Substring(0, 7) <> "http://" Or Not Geen_SQL_Injection(url) Then<br />
            ' verdere invoercontrole van url<br />
            Fout("Ongeldige URL... Een URL begint met 'http://' en mag devolgende tekens niet bevatten: ', "", *, <, >")<br />
        Else<br />
            ' als alle invoercontrole doorlopen is<br />
            ' sql parameters laden<br />
            Me.UpdComm.Parameters("@afdelingid").Value() = afdelingid<br />
            Me.UpdComm.Parameters("@naam").Value() = naam<br />
            Me.UpdComm.Parameters("@omschrijving").Value() = omschrijving<br />
            Me.UpdComm.Parameters("@url").Value() = url<br />
            ' connectie openen, rij updaten, connectie sluiten, edit-layout ongedaan maken en datagrid herladen<br />
            Conn.Open()<br />
            Me.UpdComm.ExecuteNonQuery()<br />
            Conn.Close()<br />
            DG.EditItemIndex = -1<br />
            BindGrid()<br />
        End If<br />
    End Sub<br />
<br />
    ' Invoercontrole tegen SQL Injection<br />
    Private Function Geen_SQL_Injection(ByVal code As String) As Boolean<br />
        Return code.IndexOf("'") = -1 And code.IndexOf("*") = -1 And _<br />
            code.IndexOf("<") = -1 And code.IndexOf(">") = -1 And code.IndexOf("""") = -1<br />
    End Function<br />
<br />
    ' Foutmelding bij het wijzigen van een veld<br />
    Private Sub Fout(ByVal bericht As String)<br />
        DG.EditItemIndex = -1           ' edit-layout ongedaan maken<br />
        BindGrid()                      ' datagrid herladen<br />
        Response.Write(bericht)         ' foutmelding tonen<br />
    End Sub<br />
<br />
    ' Edit-layout ongedaan maken en datagrid herladen<br />
    Public Sub DG_Cancel(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DG.CancelCommand<br />
        DG.EditItemIndex = -1<br />
        BindGrid()<br />
    End Sub<br />
<br />
    ' Zoekt de primary key van het veld in "edit-modus"<br />
    Private Sub FindEditPosKey()<br />
        ' Dataview vullen met gesorteerd op oude sorteer kolom<br />
        DA.Fill(DS, "afdelingen")<br />
        DV = DS.Tables("afdelingen").DefaultView<br />
        DV.Sort = CType(Session("SortField"), String) & CType(Session("Direction"), String)<br />
        ' Primary key van rij in "edit-modus" opslaan<br />
        Session("EditID") = DV.Item(DG.EditItemIndex).Row.Item(0)<br />
        ' DataSet leegmaken<br />
        DS.Clear()<br />
    End Sub<br />
<br />
    ' Herlaad de grid gesorteerd op SortField<br />
    Private Sub BindGrid()<br />
        ' Dataview vullen en datagrid herladen<br />
        DA.Fill(DS, "afdelingen")<br />
        DV = DS.Tables("afdelingen").DefaultView<br />
        DV.Sort = CType(Session("SortField"), String) & CType(Session("Direction"), String)<br />
        DG.DataSource = DV<br />
        DG.DataBind()<br />
        ' Indien een rij in "edit-modus" stond<br />
        If CInt(Session("EditID")) <> -1 Then<br />
            Dim RijIndex As Integer = 0<br />
            ' zolang er rijen zijn en zolang de primary key niet gevonden is, RijIndex verhogen<br />
            While RijIndex < DG.Items.Count And CInt(DG.DataKeys(RijIndex)) <> CInt(Session("EditID"))<br />
                RijIndex += 1<br />
            End While<br />
            ' zoeken naar rij in "edit-modus" uitschakelen<br />
            Session("EditID") = -1<br />
            ' de juiste rij in de "edit-modus" zetten<br />
            DG.EditItemIndex = RijIndex<br />
            ' DataSet leegmaken<br />
            DS.Clear()<br />
            BindGrid()<br />
        End If<br />
    End Sub<br />
<br />
End Class


ControlBase.vb
Imports System<br />
Imports System.Web<br />
Imports System.Web.UI<br />
Imports System.Configuration<br />
Imports System.Data.SqlClient<br />
Imports System.Resources<br />
<br />
' ************************************************************<br />
'   Controle klasse voor standaard layout van een pagina<br />
' ************************************************************<br />
<br />
Public Class ControlBase<br />
    Inherits System.Web.UI.UserControl<br />
    Private sHeader As String<br />
<br />
    Public Property Header() As String<br />
        Get<br />
            Return sHeader<br />
        End Get<br />
        Set(ByVal Value As String)<br />
            ' Opmaak van de header<br />
            sHeader = "<.h1>" & Value & "</.h1>"<br />
        End Set<br />
    End Property<br />
<br />
    Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender<br />
        ' Toevoegen van een header <br />
        Me.Controls.AddAt(0, New LiteralControl(Header()))<br />
    End Sub<br />
<br />
    'Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)<br />
    '    writer.WriteLine(Header())<br />
    'End Sub<br />
<br />
End Class

GeneralRe: [ASP.NET / VB.NET] using Page Templates disables DataGrid events Pin
Mastakilla1237-Mar-05 4:02
Mastakilla1237-Mar-05 4:02 
QuestionHow to read a word under mouse cursor? Pin
RABEE SHAHEEN6-Mar-05 23:40
RABEE SHAHEEN6-Mar-05 23:40 
AnswerRe: How to read a word under mouse cursor? Pin
Dave Kreskowiak7-Mar-05 7:17
mveDave Kreskowiak7-Mar-05 7:17 
QuestionBitMap &amp; Graphics, please HELP!? Pin
Acheto6-Mar-05 23:28
Acheto6-Mar-05 23:28 
Answerplease HELP!? Pin
Acheto8-Mar-05 8:02
Acheto8-Mar-05 8:02 
GeneralIs a Question like this Thread too BAD for this Forum? Pin
Acheto10-Mar-05 0:21
Acheto10-Mar-05 0:21 
GeneralTimetable scheduling algorithms Pin
Member 45821056-Mar-05 23:21
Member 45821056-Mar-05 23:21 
GeneralRe: Timetable scheduling algorithms Pin
Dave Kreskowiak7-Mar-05 1:12
mveDave Kreskowiak7-Mar-05 1:12 
GeneralProblem referencing COM+'s Web services via VS.NET Pin
twlong6-Mar-05 21:10
twlong6-Mar-05 21:10 
GeneralSnap-ins and Windows Service Pin
CSharpBala6-Mar-05 19:15
CSharpBala6-Mar-05 19:15 
QuestionRelation between Webrowser control and IE (or FireFox or Opera) ? Pin
mecracked6-Mar-05 18:57
sussmecracked6-Mar-05 18:57 
GeneralDisplaying which month of the year Pin
cpod6-Mar-05 18:28
cpod6-Mar-05 18:28 
GeneralRe: Displaying which month of the year Pin
Robert Rohde6-Mar-05 20:23
Robert Rohde6-Mar-05 20:23 
GeneralRe: Displaying which month of the year Pin
cpod7-Mar-05 4:03
cpod7-Mar-05 4:03 
GeneralDeploy VB.Net App w/Crystal Rpts Pin
jtex6-Mar-05 15:52
jtex6-Mar-05 15:52 
GeneralRPC Server Unavailable Pin
MagicGirL836-Mar-05 13:02
MagicGirL836-Mar-05 13:02 
GeneralRe: RPC Server Unavailable Pin
Robert Rohde6-Mar-05 20:27
Robert Rohde6-Mar-05 20:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.