Ve třídě A mám proceduru, která z třídy B převezme data a umístí je do textboxů. Je tento postup správný?   zodpovězená otázka

VB.NET, Architektura

Dobrý den, chtěl bych se zeptat, zdali správně využívám třídy. Mám vytvořenou třídu "AkceKlubu" všechny funkce vrací kolekci záznamů dat z SQL. Funkce "GET_AkceDleID" vrací jeden řádek s n sloupci. Dále "Partial Class Admin_AkceEditace" inicializuje třídu "AkceKlubu" a z této třídy plním DropDownlisty a textová pole.

Ve třídě Admin_AkceEditace mám proceduru Private Sub ZobrazAkciDleID(ByVal IDAkce As Integer), která z třídy "AkceKlubu" převezme data a umístí je do textboxů.

Otázka: Dělám to správně, nebo exituje lepší varianta řešení?

PS: Třída DBAccess zajišťuje komunikaci s SQL serverem. Vše je funkční.

Imports Microsoft.VisualBasic
Imports DBAccess
Imports System.Data
Imports System.Data.SqlClient

Namespace DataSQL

    Public Class AkceKlubu

#Region "Public property"
        Private newIDAkce As Integer
        Public Property IDAkce() As Integer
            Get
                Return newIDAkce
            End Get
            Set(ByVal value As Integer)
                newIDAkce = value
            End Set
        End Property

        Private newZacatekAkce As String
        Public Property ZacatekAkce() As String
            Get
                Return newZacatekAkce
            End Get
            Set(ByVal value As String)
                newZacatekAkce = value
            End Set
        End Property

        Private newKonecAkce As String
        Public Property KonecAkce() As String
            Get
                Return newKonecAkce
            End Get
            Set(ByVal value As String)
                newKonecAkce = value
            End Set
        End Property

        Private newMistoAkce As String
        Public Property MistoAkce() As String
            Get
                Return newMistoAkce
            End Get
            Set(ByVal value As String)
                newMistoAkce = value
            End Set
        End Property

        Private newPopisAkce As String
        Public Property PopisAkce() As String
            Get
                Return newPopisAkce
            End Get
            Set(ByVal value As String)
                newPopisAkce = value
            End Set
        End Property

        Private newPoznamka As String
        Public Property Poznamka() As String
            Get
                Return newPoznamka
            End Get
            Set(ByVal value As String)
                newPoznamka = value
            End Set
        End Property

        Private newIDAkceStatus As Integer
        Public Property IDAkceStatus() As Integer
            Get
                Return newIDAkceStatus
            End Get
            Set(ByVal value As Integer)
                newIDAkceStatus = value
            End Set
        End Property

        Private newIDAkceZamereni As Integer
        Public Property IDAkceZamereni() As Integer
            Get
                Return newIDAkceZamereni
            End Get
            Set(ByVal value As Integer)
                newIDAkceZamereni = value
            End Set
        End Property

#End Region

        Public Function GET_SeznamAkceVse() As DataSet
            Dim db As New DBAccess
            Dim dts As New DataSet
            db.AddParameter("@par", 151)
            dts = db.ExecuteDataSet("SKMPO_Ciselniky")
            Return dts
        End Function

        Public Function GET_SeznamAkcePlanPevnyTermin() As DataSet
            Dim db As New DBAccess
            Dim dts As New DataSet
            db.AddParameter("@par", 154)
            dts = db.ExecuteDataSet("SKMPO_Ciselniky")
            Return dts
        End Function

        Public Function GET_SeznamAkceStatusy() As DataSet
            Dim db As New DBAccess
            Dim dts As New DataSet
            db.AddParameter("@par", 153)
            dts = db.ExecuteDataSet("SKMPO_Ciselniky")
            Return dts
        End Function

        Public Function GET_AkceStatus() As DataSet
            Dim db As New DBAccess
            Dim dts As New DataSet
            db.AddParameter("@par", 5)
            dts = db.ExecuteDataSet("SKMPO_Ciselniky")
            Return dts
        End Function

        Public Function GET_SeznamAkceUskutecnene() As DataSet
            Dim db As New DBAccess
            Dim dts As New DataSet
            db.AddParameter("@par", 155)
            dts = db.ExecuteDataSet("SKMPO_Ciselniky")
            Return dts
        End Function

        Public Function GET_AkceZamereni() As DataSet
            Dim db As New DBAccess
            Dim dts As New DataSet
            db.AddParameter("@par", 6)
            dts = db.ExecuteDataSet("SKMPO_Ciselniky")
            Return dts
        End Function

        Public Function GET_AkceDleID(ByVal IDAkce As Integer) As AkceKlubu

            Dim db As New DBAccess

            db.AddParameter(New SqlParameter("@par", 152))
            db.AddParameter(New SqlParameter("@IdAkce", IDAkce))

            Dim RS As SqlDataReader = CType(db.ExecuteReader("SKMPO_Ciselniky"), SqlDataReader)

            If RS.HasRows Then
                Dim r As AkceKlubu = New AkceKlubu
                RS.Read()
                r.IDAkce = RS(RS.GetOrdinal("IDAkce"))
                r.ZacatekAkce = RS(RS.GetOrdinal("Zacatek"))
                r.KonecAkce = IIf(RS(RS.GetOrdinal("Konec")) Is DBNull.Value, "", RS(RS.GetOrdinal("Konec")))
                r.MistoAkce = RS(RS.GetOrdinal("MistoAkce"))
                r.PopisAkce = RS(RS.GetOrdinal("PopisAkce"))
                r.Poznamka = IIf(RS(RS.GetOrdinal("Poznamka")) Is DBNull.Value, "", RS(RS.GetOrdinal("Poznamka")))
                r.IDAkceStatus = RS(RS.GetOrdinal("IDAkceStatus"))
                r.IDAkceZamereni = RS(RS.GetOrdinal("IDAkceZamereni"))
                RS.Close()
                Return r
            Else
                RS.Close()
                Return Nothing
            End If

        End Function

    End Class

End Namespace

Imports System.Data
Imports System.Data.SqlClient
Imports System.Security.Principal

Partial Class Admin_AkceEditace
    Inherits System.Web.UI.Page

    Dim MyCiselnik As New Ciselnik
    Dim MyAdminOvereniPristupuKeStrance As New AdminOvereniPristupuKeStrance
    Dim MyAkceKlubu As New DataSQL.AkceKlubu

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

        If IsPostBack = False Then
            If MyAdminOvereniPristupuKeStrance.GETOverCookies(Request.Cookies("SKMPO_Cookie")("IDClena"), System.Web.HttpContext.Current.Request.Url.AbsolutePath, Request.Cookies("SKMPO_Cookie")("Cookies").ToString) = False Then
                Server.Transfer("Admin_NeopravnenyPristup.aspx")
                Exit Sub
            End If

            With IDAkceStatus
                .DataSource = MyAkceKlubu.GET_AkceStatus
                .DataValueField = "ID"
                .DataTextField = "Popis"
                .DataBind()
            End With

            With Me.IDAkceZamereni
                .DataSource = MyAkceKlubu.GET_AkceZamereni
                .DataValueField = "ID"
                .DataTextField = "Popis"
                .DataBind()
            End With


            NactiSeznamAkci()
        End If

    End Sub

    Private Sub NactiSeznamAkci()

        Me.SeznamAkci.DataSource = MyAkceKlubu.GET_SeznamAkceVse
        Me.SeznamAkci.DataBind()

    End Sub


    Private Sub ZobrazAkciDleID(ByVal IDAkce As Integer)

        Try
            Dim d As DataSQL.AkceKlubu = MyAkceKlubu.GET_AkceDleID(IDAkce)

            Me.IDAkce.Text = d.IDAkce
            Me.Zacatek.Text = d.ZacatekAkce
            Me.Konec.Text = d.KonecAkce
            Me.MistoAkce.Text = d.MistoAkce
            Me.PopisAkce.Text = d.PopisAkce
            Me.Poznamka.Text = d.Poznamka
            Me.IDAkceStatus.SelectedValue = d.IDAkceStatus
            Me.IDAkceZamereni.SelectedValue = d.IDAkceZamereni

        Catch ex As Exception
            Me.UlozitAkciInfo.Text = Err.Description
        End Try
    End Sub


End Class

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Řekl bych, že je to OK, krásně máte oddělenou aplikační logiku od práce s tady. Akorát to ZobrazAkciDleID by mělo jít vylepšit, abyste nemusel ta tada rvát do těch TextBoxů ručně. Pomoci by měla komponenta FormView.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím, děkuji za zhodnocení a Váš čas. Ještě mám jeden dotaz, jakým způsobem mám pomocí třídy ukládat data do DB. Prozatím to provádím pomocí funkce a to tak:

Public function UlozData(ByVal ID as integer, ByVal Jmeno as String, ........), 

kdy nadefinuji např. až 40 položek, které potřebuji uložit.

Použití této metody je pak trochu nepřehledné, existuje elegantnější řešení?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud dodržujete konvenci, že TextBox se jmenuje stejně jako sloupeček v databázi (což doporučuji, jinak se z toho zblázníte), pak můžete projít pomocí Reflection všechny vlastnosti v daném objektu, dynamicky najít ve stránce přes FindControl všechny TextBoxy a je to.

Ale podle mě by to mělo jít snadněji přes komponentu FormView a pomocí databindingu. Vyzkouším a dám vědět.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak na objekt se přímo FormView napojit nedá, je nutné napojit FormView na ObjectDataSource.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji za pomoc. Vyzkouším a uvidíme.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback