Avatar billede wildthing Nybegynder
29. maj 2007 - 15:32 Der er 17 kommentarer og
1 løsning

Formview - insert af initialer fra bruger

Jeg har et formview hvor jeg i min insert gerne vil undgå at skulle udfylde alle felter. Jeg vil gerne have feltet "createdby" til at være lig med min sessionsvariabel session("userittask"). HVad er den rigtige måde til at gøre sådan? Her lidt kode hvor jeg har skrællet en masse unødvendigt af. jeg har ikke noget i min codebehind fil. Kan jeg ikke klare det direkte vha parametrene her i mit formview. I gammel ASP ville jeg jo bare sige ... Values(newid(),session("userittask"), osv.. i min SQL sætning:)

/wildthing

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    &nbsp;
 
    <asp:FormView ID="FormView1" runat="server" AllowPaging="True" DataKeyNames="GUID"
        DataSourceID="DS_tasks">
        <EditItemTemplate>
 
            PIC:
            <asp:TextBox ID="PICTextBox" runat="server" Text='<%# Bind("PIC") %>'>
            </asp:TextBox><br />
            Createdby:
            <asp:TextBox ID="CreatedbyTextBox" runat="server" Text='<%# Bind("Createdby") %>'>
            </asp:TextBox><br />
            Createdon:
            <asp:TextBox ID="CreatedonTextBox" runat="server" Text='<%# Bind("Createdon") %>'>
            </asp:TextBox><br />
            User_ini:
            <asp:TextBox ID="User_iniTextBox" runat="server" Text='<%# Bind("User_ini") %>'>
            </asp:TextBox><br />
            category:
            <asp:TextBox ID="categoryTextBox" runat="server" Text='<%# Bind("category") %>'>
            </asp:TextBox><br />
            Taskdesc:
            <asp:TextBox ID="TaskdescTextBox" runat="server" Text='<%# Bind("Taskdesc") %>'>
            </asp:TextBox><br />
            Status:
            <asp:TextBox ID="StatusTextBox" runat="server" Text='<%# Bind("Status") %>'>
            </asp:TextBox><br />
            Modifiedby:
            <asp:TextBox ID="ModifiedbyTextBox" runat="server" Text='<%# Bind("Modifiedby") %>'>
            </asp:TextBox><br />
            Modifiedon:
            <asp:TextBox ID="ModifiedonTextBox" runat="server" Text='<%# Bind("Modifiedon") %>'>
            </asp:TextBox><br />
            Taskdescshort:
            <asp:TextBox ID="TaskdescshortTextBox" runat="server" Text='<%# Bind("Taskdescshort") %>'>
            </asp:TextBox><br />
            Attachedfiles:
            <asp:TextBox ID="AttachedfilesTextBox" runat="server" Text='<%# Bind("Attachedfiles") %>'>
            </asp:TextBox><br />
            Solvedby:
            <asp:TextBox ID="SolvedbyTextBox" runat="server" Text='<%# Bind("Solvedby") %>'>
            </asp:TextBox><br />
            Solvedon:
            <asp:TextBox ID="SolvedonTextBox" runat="server" Text='<%# Bind("Solvedon") %>'>
            </asp:TextBox><br />
            Expected_solvedon:
            <asp:TextBox ID="Expected_solvedonTextBox" runat="server" Text='<%# Bind("Expected_solvedon") %>'>
            </asp:TextBox><br />
            Solutiondesc:
            <asp:TextBox ID="SolutiondescTextBox" runat="server" Text='<%# Bind("Solutiondesc") %>'>
            </asp:TextBox><br />
            <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
                Text="Update">
            </asp:LinkButton>
            <asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                Text="Cancel">
            </asp:LinkButton>
        </EditItemTemplate>
        <InsertItemTemplate>
            &nbsp;<asp:TextBox ID="GUIDTextBox" runat="server" Text='<%# Bind("GUID") %>' Visible="False"></asp:TextBox><br />
            PIC:
            <asp:TextBox ID="PICTextBox" runat="server" Text='<%# Bind("PIC") %>'></asp:TextBox><br />
            &nbsp;<asp:TextBox ID="CreatedbyTextBox" runat="server" Text='<%# Bind("Createdby") %>' Visible="False"></asp:TextBox><br />
            &nbsp;<asp:TextBox ID="CreatedonTextBox" runat="server" Text='<%# Bind("Createdon") %>' Visible="False"></asp:TextBox><br />
            User_ini:
            <asp:TextBox ID="User_iniTextBox" runat="server" Text='<%# Bind("User_ini") %>'></asp:TextBox><br />
            category:
            <asp:TextBox ID="categoryTextBox" runat="server" Text='<%# Bind("category") %>'></asp:TextBox><br />
            Taskdesc:
            <asp:TextBox ID="TaskdescTextBox" runat="server" Text='<%# Bind("Taskdesc") %>'></asp:TextBox><br />
            Status:
            <asp:TextBox ID="StatusTextBox" runat="server" Text='<%# Bind("Status") %>' Visible="False"></asp:TextBox><br />
            Modifiedby:
            <asp:TextBox ID="ModifiedbyTextBox" runat="server" Text='<%# Bind("Modifiedby") %>' Visible="False"></asp:TextBox><br />
            Modifiedon:
            <asp:TextBox ID="ModifiedonTextBox" runat="server" Text='<%# Bind("Modifiedon") %>' Visible="False"></asp:TextBox><br />
            Taskdescshort:
            <asp:TextBox ID="TaskdescshortTextBox" runat="server" Text='<%# Bind("Taskdescshort") %>'></asp:TextBox><br />
            Attachedfiles:
            <asp:TextBox ID="AttachedfilesTextBox" runat="server" Text='<%# Bind("Attachedfiles") %>'></asp:TextBox><br />
            Solvedby:
            <asp:TextBox ID="SolvedbyTextBox" runat="server" Text='<%# Bind("Solvedby") %>' Visible="False"></asp:TextBox><br />
            Solvedon:
            <asp:TextBox ID="SolvedonTextBox" runat="server" Text='<%# Bind("Solvedon") %>' Visible="False"></asp:TextBox><br />
            Expected_solvedon:
            <asp:TextBox ID="Expected_solvedonTextBox" runat="server" Text='<%# Bind("Expected_solvedon") %>'></asp:TextBox><br />
            Solutiondesc:
            <asp:TextBox ID="SolutiondescTextBox" runat="server" Text='<%# Bind("Solutiondesc") %>' Visible="False"></asp:TextBox><br />
            <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
                Text="Insert" OnClick="InsertButton_Click"></asp:LinkButton>
            <asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                Text="Cancel"></asp:LinkButton>
        </InsertItemTemplate>
        <ItemTemplate>
            <br />
            &nbsp;&nbsp;&nbsp;
            <asp:LinkButton ID="LinkButton1" runat="server" CommandName="new">Add task</asp:LinkButton>
        </ItemTemplate>
        <EmptyDataTemplate>
            db is empty
        </EmptyDataTemplate>
    </asp:FormView>
    &nbsp; &nbsp;
    <asp:SqlDataSource ID="DS_tasks" runat="server" ConflictDetection="CompareAllValues"
        ConnectionString="<%$ ConnectionStrings:ITtasksConnectionString %>"
        InsertCommand="INSERT INTO [tasks] ([GUID], [PIC], [Createdby], [Createdon], [User_ini], [category], [Taskdesc], [Status], [Modifiedby], [Modifiedon], [Taskdescshort], [Attachedfiles], [Solvedby], [Solvedon], [Expected_solvedon], [Solutiondesc]) VALUES (newID(), @PIC, @Createdby, @Createdon, @User_ini, @category, @Taskdesc, @Status, @Modifiedby, @Modifiedon, @Taskdescshort, @Attachedfiles, @Solvedby, @Solvedon, @Expected_solvedon, @Solutiondesc)"
        OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [tasks]"
      >
        <InsertParameters>
            <asp:Parameter Name="PIC" Type="String" />
            <asp:Parameter Name="Createdby" Type="String" />
            <asp:Parameter Name="Createdon" Type="DateTime" />
            <asp:Parameter Name="User_ini" Type="String" />
            <asp:Parameter Name="category" Type="String" />
            <asp:Parameter Name="Taskdesc" Type="String" />
            <asp:Parameter Name="Status" Type="String" />
            <asp:Parameter Name="Modifiedby" Type="String" />
            <asp:Parameter Name="Modifiedon" Type="DateTime" />
            <asp:Parameter Name="Taskdescshort" Type="String" />
            <asp:Parameter Name="Attachedfiles" Type="String" />
            <asp:Parameter Name="Solvedby" Type="String" />
            <asp:Parameter Name="Solvedon" Type="DateTime" />
            <asp:Parameter Name="Expected_solvedon" Type="DateTime" />
            <asp:Parameter Name="Solutiondesc" Type="String" />
        </InsertParameters>
    </asp:SqlDataSource>
    &nbsp;&nbsp;
</asp:Content>
Avatar billede neoman Novice
29. maj 2007 - 16:00 #1
ved ikke om man kan gøre det direkte i ASPX filen

I code-behind ville jeg gøre sådan i et passende event på  FormView'et:
dim myTextBox as textbox = myTextBox.formview1.rows(1).cells(1).controls(0)
Hvor:
rows(index) - den række i dit formview du skal have lagt noget i
cells(index) - den celle - formentligt med index=1, når index 0 er optaget af lablen
controls(0) - den textbox control som cellen har, når formview'et er i insert mode

myTextBox=session('blabla')

Hvilket event ? ModeChanged, hvis den ikke fødes i InsertMode, ellers formentligt i ItemCreated :)
Avatar billede neoman Novice
29. maj 2007 - 16:02 #2
dim myTextBox as textbox = formview1.rows(1).cells(1).controls(0)
Avatar billede tomledk Nybegynder
29. maj 2007 - 18:11 #3
<asp:TextBox
  ID="CreatedbyTextBox"
  runat="server"
  Text='<%= Session("userittask") %>' />

Det burde indsætte værdien fra din session variable direkte i tekstboksen. Man kan altid vurdere om det er en pæn måde at gøre det på - men muligvis den eneste hvis du har al din kode ligge i ASPX'en.
Avatar billede neoman Novice
29. maj 2007 - 18:26 #4
Det er en fin idé tomledk har der - men så ryger bindingen til DB'en jo og den vil næppe blive gemt. Gad vide om man kan gifte hans løsning med noget andet ? dr_chaos - where are you ? :)
Avatar billede neoman Novice
29. maj 2007 - 18:31 #5
Du kunne lave et nummer som dr_chaos har givet mig her: http://www.eksperten.dk/spm/780370
Avatar billede wildthing Nybegynder
30. maj 2007 - 11:23 #6
tomledk>
<asp:TextBox ID="CreatedbyTextBox" runat="server" Text='<%= # Bind("Createdby") %>' Visible="true">AT</asp:TextBox>    .... sætter fint "AT" ind i databasen, men

<asp:TextBox ID="CreatedbyTextBox" runat="server" Text='<%= Session("userittasks") %>' Visible="true"></asp:TextBox>

viser blot <%= Session("userittasks") %> i min textbox og intet gemmes.

jeg undrer mig over at jeg i dit eksempel ikke får indholdet af Session("userittasks") at se???
Avatar billede wildthing Nybegynder
30. maj 2007 - 12:56 #7
neoman>
    Protected Sub FormView1_ItemCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.FormViewCommandEventArgs) Handles FormView1.ItemCommand
        Dim myTextBox As TextBox = FormView1.rows(1).cells(1).controls(0)
    End Sub
giver fejl. "rows" findes ikke?!?
Avatar billede neoman Novice
30. maj 2007 - 13:09 #8
1.hvad med at kombinere tomledk's løsning med din egen ? gad vide hvad dennee her ville gøre :
<asp:TextBox ID="CreatedbyTextBox" runat="server" Text=Text='<%# Bind("Createdby") %>' Visible="true"><%= Session("userittasks") %></asp:TextBox>

2. en formview har rows, når du kan se den på skærmen. Hvordan lyder fejlmeddelelsen præcist ? rows(rowIndex) skulle gerne pege på den række med createdBy - så vidt jeg kan se så er rowIndex=1 i dit tilfælde. 

Hvis FormView er ikke i edit mode eller insert mode, så er rækkerne der stadig, men så ligger der enten en Label som control(0), eller også er der slet ingen control i cellen, men kun tekst. I hvilken mode er din kontrol når du får fejlen (ved formentligt at trykke på en knap?)
Avatar billede neoman Novice
30. maj 2007 - 13:11 #9
Det gik for stærkt.. igen :-)
<asp:TextBox ID="CreatedbyTextBox" runat="server" Text='<%= # Bind("Createdby") %>' Visible="true"><%= Session("userittasks") %></asp:TextBox>
Avatar billede wildthing Nybegynder
30. maj 2007 - 13:59 #10
neoman>
dit forslag 1 har jeg prøvet, da dette jo i min logik burde virke. jeg får en fejl at <%%> ikke er tilladt i denne context.

2. Min event er itemcommand som fyres når jeg klikker på en itemtemplate knap (der hedder "add new". Jeg for at vide at "Error    1    'rows' is not a member of 'System.Web.UI.WebControls.FormView'.

Intellescense giver mig også kun en der hedder "row"
Avatar billede neoman Novice
30. maj 2007 - 14:32 #11
Ah ok - har lige prøvet og du har ret. Har blandet details view med formview. Prøv dette her i formviewets DataBound eventet

if FormView1.CurrentMode =FormViewMode.Insert  then

    ' Use the Row property to retrieve the data row from
    ' the FormView control.
    Dim row As FormViewRow = EmployeeFormView.Row
   
    dim myTextBox as TextBox = row.FindControl("CreatedbyTextBox")
    myTextBox.text = Session("userittasks")




end if
Avatar billede neoman Novice
30. maj 2007 - 14:33 #12
hehe .. Dim row As FormViewRow = FormView1.Row
Avatar billede wildthing Nybegynder
31. maj 2007 - 09:48 #13
Neoman>  Min helt:)
forstår ikke helt hvordan det lader sig gøre.
  dim myTextBox as TextBox = row.FindControl("CreatedbyTextBox")

Troede at det ville betyde at du hentede indholdet af Createdbytextbox over i mytextbox, og ikke at det var samhørige. men det det må de jo være siden at det virker begge veje og at Createdbytextbox kan blive lige med den nye værdi mytextbox.

burde man ikke kunne skrive sådan i så fald
row.FindControl("CreatedbyTextBox") = session("userittasks")

jeg vil så gerne forstå det:)...

send et svar
Avatar billede neoman Novice
31. maj 2007 - 18:09 #14
1.
row.FindControl("CreatedbyTextBox") = session("userittasks") kan du ikke skrive
da row.FindControl("CreatedbyTextBox") finder controllen som hedder CreatedByTextbox

Denne har en property som hedder text - og den sætter du ved
myTextBox.text = Session("userittasks")

2. Det der sker er som følger:

a. row.FindControl("CreatedbyTextBox") finder en control - den som sidder i row'et
b. dim myTextBox er en deklaration - den laver en tom plads til en textbox, som ikke er besat endnu
c. når du siger
  mytextBox = row.FindControl("CreatedbyTextBox")

eller, i et hug:
dim myTextBox as TextBox = row.FindControl("CreatedbyTextBox")

så siger du ikke "kopiér den tekstbox som findes i row'et over i min egen" fordi du har med objekter at gøre. Det, den statement siger reelt er :
"Find den position i hukommelsen, hvor min CreatedByTextBox ligger. Derpå, tag myTextBox, og lad den pege på samme sted i hukommelsen."

Med andre ord - lad dig ikke forvirre af, at vi nu har kaldt den myTextBox - i realiteten så opererer du faktisk direkte på den textbox som liger begravet i formviewets row. Det er ikke en kopi - men den samme tingest set igennem andre briller.

Er ovenstående klart nok ?
Avatar billede neoman Novice
31. maj 2007 - 18:24 #15
og et andet eksempel på det samme - du kan prøve at køre det på en side selv :

        Dim a As New ArrayList

        a.Add(1)
        a.Add(2)
        a.Add(3)

        Session("a") = a

        Dim b As New ArrayList
        b = CType(Session("a"), ArrayList)
        'fjerner sidste post i b
        b.RemoveAt(b.Count - 1)

        MsgBox(a.Count)

Det sjove her er, at a.count = 2 og ej 3 - og det er fordi a og b begge peger på samme sted i hukommelsen.
Avatar billede wildthing Nybegynder
31. maj 2007 - 21:01 #16
tak neoman... interessant, at man med objecter blot peger på det samme, når man/jeg troede jeg kopierede hele objectet.

Hvis man skal have en kopi af en værdi. er det så bare at læse dem ud i variabler?

dim tekst as string
tekst = obj.text
Avatar billede neoman Novice
31. maj 2007 - 21:19 #17
Øh - med forbehold: ja.

Hvis du vil vide, hvilke egenskaber et objekt har, så slå den op på MSDN med klassenavn og "members" så , f.eks. for en tekstboks :

TextBox Members

så får du en liste af alle properties, metoder og events som objektet har.
Avatar billede wildthing Nybegynder
01. juni 2007 - 13:58 #18
Neoman> dit første bud
dim myTextBox as textbox = myTextBox.formview1.rows(1).cells(1).controls(0) > ændret til detailsview....

har jeg nu prøvet, men det driller, og jeg kan ikke få det til at virke. Så simpel som nedenstående kan det dog gøres under eventet "Itemupdate"

e.NewValues("Modifiedby") = Session("userittasks")

bare som info:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester