Avatar billede aero Nybegynder
01. december 2010 - 08:24 Der er 20 kommentarer og
1 løsning

Count i en LINQ connection

Hvordan kan man counte antal recorder i en LINQ og sætte dette antal = PValue, ud fra denne kode som henter alt fra min db

    Public Sub linqdb()

        Dim DBconn As New GetProductListDataContext()
        Dim Q = _
        From p In DBconn.GetTable(Of P)() _
            Order By p.PName Descending _
        Select p
        MyRep.DataSource = Q
        MyRep.DataBind()
    End Sub
Avatar billede arne_v Ekspert
01. december 2010 - 21:09 #1
PValue = Q.Count()

?
Avatar billede aero Nybegynder
01. december 2010 - 21:48 #2
okay så det er bare som en alm. SQL
smid et svar..
Avatar billede aero Nybegynder
01. december 2010 - 22:39 #3
Skal den være efter eller før MyRep.Data.....

altså
    Public Sub linqdb()

        Dim DBconn As New GetProductListDataContext()
        Dim Q = _
        From p In DBconn.GetTable(Of Product)() _
            Order By p.PName Descending _
        Select p
        MyRep.DataSource = Q
        MyRep.DataBind()
        Dim PValue As String = Q.Count()
    End Sub

eller før MyRep.DataSource = Q synes nemlig ikke den tager noget med over på min side..
Avatar billede arne_v Ekspert
02. december 2010 - 02:24 #4
Prøv:

        Dim DBconn As New GetProductListDataContext()
        Dim Q = _
        From p In DBconn.GetTable(Of Product)() _
            Order By p.PName Descending _
        Select p
        Dim L = Q.ToList
        MyRep.DataSource = L
        MyRep.DataBind()
        Dim PValue As Integer = L.Count()
Avatar billede aero Nybegynder
02. december 2010 - 18:25 #5
Hej synes ikke der sker noget jeg får ikke nogle tal frem i
<span id="Span1" class="">Ialt " <%# Eval("PValue")%> " Produkter</span>
Avatar billede arne_v Ekspert
03. december 2010 - 00:52 #6
Prøv med følgende i .aspx:

<asp:label id="PValue" runat="server"/>

og erstat:

Dim PValue As Integer = L.Count()

med:

PValue.Text = L.Count().ToString()

i din code behind.
Avatar billede aero Nybegynder
03. december 2010 - 21:22 #7
så får jeg denne fejl

BC30451: 'PValue' er ikke blevet erklæret. Der er muligvis ikke adgang pga. det angivne beskyttelsesniveau.
Avatar billede aero Nybegynder
03. december 2010 - 22:28 #8
Min code er som flg. og den kommer ikke noget noget
Der kommer 4 recorder, men der hvor den skulle skrive tallet 4 skriver den intet.

    Public Sub linqdb()

        Dim DBconn As New GetProductListDataContext()
        Dim Q = _
        From p In DBconn.GetTable(Of Product)() _
        Where p.IsEnabled = "1" _
            Order By p.PName Descending _
        Select p
        Dim L = Q.ToList
        MyRep.DataSource = Q
        MyRep.DataBind()
        Dim PValue As New Label
        PValue.Text = L.Count().ToString()

    End Sub
Avatar billede arne_v Ekspert
04. december 2010 - 00:04 #9
Du skal ikke have en:

Dim PValue As New Label

men en:

<asp:label id="PValue" runat="server"/>
Avatar billede aero Nybegynder
04. december 2010 - 13:29 #10
ok men gør jeg det på den måde så siger den at PValue er ikke declared
Avatar billede aero Nybegynder
04. december 2010 - 20:04 #11
jeg ved hvad problemet er men hvordan klare jeg det.
den Label er inde i min Repeater.
Det er vel derfor den ikke kan skrive PValue, medmindre jeg smider den uden for min repeater.

Hvordan kan jeg få PValue ind i min Repeater !?
Avatar billede arne_v Ekspert
05. december 2010 - 19:50 #12
Ah ja - der er et lille problem.

Se nedenstående eksempel for ideer til hvordan det kan løses:

<%@ import namespace="System.Data" %>
<%@ import namespace="System.Data.SqlClient" %>
<html>
<head>
<script language="VB" runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
    Dim con As SqlConnection = New SqlConnection("server=ARNEPC3\SQLEXPRESS;Integrated Security=true;database=Test")
    con.Open()
    Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM T1", con)
    Dim rdr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
    myrep.DataSource = rdr
    myrep.DataBind()
    For Each ctl As Control In myrep.Items
        CType(ctl.FindControl("mylbl"), Label).Text = "Det virker"
    Next
End Sub
</script>
</head>
<body>
<form runat=server>
    <table border>
        <asp:Repeater id="myrep" runat="server">
            <ItemTemplate>
                <tr>
                <td><%# Eval("F1") %></td>
                <td><%# Eval("F2") %></td>
                <td><asp:label id="mylbl" runat="server"/></td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
    </table>
</form>
</body>
</html>
Avatar billede aero Nybegynder
05. december 2010 - 20:12 #13
Hej Arne tak

I Visual Studio
Får jeg ikke fejl ved dette
    Public Sub linqdb()

        Dim DBconn As New GetProductListDataContext()
        Dim Q = _
        From p In DBconn.GetTable(Of Product)() _
        Where p.IsEnabled = "1" _
            Order By p.PName Descending _
        Select p

        MyRep.DataSource = Q
        MyRep.DataBind()
        For Each ctl As Control In MyRep.Items
            CType(ctl.FindControl("PValue"), Label).Text = Q.ToList.Count()
        Next

    End Sub

Men når jeg Debug (F5) så
System.NullReferenceException was unhandled by user code
  Message=Objektreferencen er ikke indstillet til en forekomst af et objekt.
Avatar billede arne_v Ekspert
05. december 2010 - 20:33 #14
Og du har label inden i repeater?
Avatar billede aero Nybegynder
05. december 2010 - 20:47 #15
ja

        <FooterTemplate>
            <table style="padding-bottom: 10px; border-bottom: 1px solid #cdcdcd; border-left: 1px solid #cdcdcd; border-right: 1px solid #cdcdcd;" width='100%' border='0' cellspacing='0' cellpadding='0'>
                <tr>
                    <td colspan='4'>
                        <span id="" class="">Ialt <asp:label id="PValue" runat="server"/> Produkter</span>
                    </td>
                </tr>
                <tr>
                    <td colspan='4'>
                    </td>
                </tr>
            </table>
        </FooterTemplate>
    </asp:Repeater>
</asp:Content>
Avatar billede arne_v Ekspert
05. december 2010 - 21:34 #16
Ja men ikke i Items men i Footer.

Jeg ved faktisk ikke hvordan den tilgåes,

Prøv:

CType(MyRep.FindControl("PValue"), Label).Text = Q.ToList.Count()
Avatar billede aero Nybegynder
05. december 2010 - 22:06 #17
du har ret det virker FINT i item men ikke i footer.
Hmm men alligevel 1000 tak.

Lige et hurtigt spm.
Hvis jeg i samme sub som
CType(MyRep.FindControl("PValue"), Label).Text = Q.ToList.Count()

Kan jeg da længere nede i sub'en sætte den = denne linje også !??
Hvor 10000 skal være værdien !?

CreatePaging(10000, PDSource.PageCount)
Avatar billede aero Nybegynder
05. december 2010 - 23:23 #18
Hej Arne

Jeg brugte din CType linje men erstattede hele For Each med
CType(MyRep.Controls(MyRep.Controls.Count - 1).FindControl("PValue"), Label).Text = Q.ToList.Count()

og det virker
1000 tak og også tak for din tålmodighed med mig....

kunne jeg tage det tal fra
CType(MyRep.Controls(MyRep.Controls.Count - 1).FindControl("PValue"), Label).Text = Q.ToList.Count()

og i samme sub sætte det = itemscount
så jeg kan bruge det i denne også

CreatePaging(itemscount, PDSource.PageCount)
Avatar billede arne_v Ekspert
05. december 2010 - 23:39 #19
Jeg har vist tabt tråden nu.
Avatar billede aero Nybegynder
06. december 2010 - 22:56 #20
vil du smide et svar.
Avatar billede arne_v Ekspert
06. december 2010 - 23:01 #21
gerne
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
Kurser inden for grundlæggende programmering

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