Avatar billede pedalkurwa Nybegynder
21. maj 2008 - 17:03 Der er 3 kommentarer

SQL sætning & substring

Hej.. håber nogle kan hjælpe med følgende..

skal have udskrevet de 5 nyeste overskrifter [Overskrift] hentet fra tabellen [nyhedsTabel], men antallet af tegn for overskrifterne skal begrænses til fx 30 tegn, efterfulgt af "..", ligesom man fx ser det på: (http://xplayn.com/) under scenenyheder og debat. Bruger datalist, og udskriver med labels i itemtemplates.

Har kigget på to muligheder, enten at tilføje ".ToString().Substring(0,30)" i label'en, eller at tilføje "substring(0,30)" i SQL sætningen.

Første mulighed virker kun når der er få tegn som max. Sætter jeg tallet for højt får jeg fejlbeskeden: "System.ArgumentOutOfRangeException: Index and length must refer to a location within the string." som jeg ikke har fundet løsningen på.
Linjen jeg lavede:

Text='<%# Eval("Overskrift").ToString().Substring(0,30) + ".." %>'


Anden mulighed kræver hjælp fra jer.
Fandt denne side: (http://www.1keydata.com/sql/sql-substring.html)
der viser et eksempel med substring i sql sætninger.

Nuværende sql sætning er følgende:

SelectCommand="SELECT TOP 5 [Id], [DatoNu], [Overskrift], [Type] FROM [nyhedsTabel] WHERE ([Type] = ?) ORDER BY [Id] DESC"

men kan ikke få lavet en sætning der virker med substring. :(

herunder er den relevante kode:
---------------

<asp:AccessDataSource ID="AccessDataSource1" runat="server"
DataFile="~/App_Data/NFNDB.mdb"

SelectCommand="SELECT TOP 5 [Id], [DatoNu], [Overskrift], [Type] FROM [nyhedsTabel] WHERE ([Type] = ?) ORDER BY [Id] DESC">

<SelectParameters>
<asp:Parameter DefaultValue="3" Name="Type" Type="String" />
</SelectParameters>
</asp:AccessDataSource>
               
<asp:DataList ID="DataList1" runat="server" DataSourceID="AccessDataSource1" DataKeyField="Id" CellSpacing="6" Width="185px">

<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="#nogo">                                             
<asp:Label ID="OverskriftLabel" runat="server" Font-Bold="true" ForeColor="#000000" Text='<%# Eval("Overskrift")  + ".." %>'>
</asp:Label><br />
</asp:HyperLink>
</ItemTemplate>

</asp:DataList>

---------------

Har også prøvet at sætte width="185px" på datalisten, men hjælper ikke, da overskrifterne uden tegn begrænsning bare vil gå udover feltet.
Avatar billede pedalkurwa Nybegynder
25. maj 2008 - 11:32 #1
ak ja
Avatar billede arne_v Ekspert
02. juni 2008 - 04:31 #2
Lav en metode til det.

Komplet demo:

<%@ import namespace="System.Data" %>
<html>
<head>
<script language="C#" runat="server">
public void Page_Load(Object sender, EventArgs e)
{
    DataTable dt = new DataTable("FmtTst");
    dt.Columns.Add(new DataColumn("s", typeof(string)));
    dt.Rows.Add(new object[] { "abc" });
    dt.Rows.Add(new object[] { "abcdef" });
    dt.Rows.Add(new object[] { "abcdefghi" });
    dt.Rows.Add(new object[] { "abcdefghijkl" });
    MyDataList.DataSource = dt.DefaultView;
    MyDataList.DataBind();
}
public string SpecialTrunc(string s, int len)
{
    if(s.Length <= len)
    {
        return s;
    }
    else
    {
        return s.Substring(0, len - 2) + "..";
    }
}
</script>
</head>
<body>
<form runat=server>
    <table border>
        <asp:Repeater id="MyDataList" runat="server">
            <ItemTemplate>
                <tr>
                <td><%# Eval("s") %></td>
                <td><%# SpecialTrunc((string)Eval("s"), 8) %></td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
    </table>
</form>
</body>
</html>
Avatar billede kjulius Novice
24. juni 2008 - 17:20 #3
Da du bruger en TOP funktion og du refererer til en .MDB fil, gå jeg ud fra, at du bruger en Access database. I så fald kunne du prøve:

SelectCommand="SELECT TOP 5 [Id], [DatoNu], IIF(LEN([Overskrift]) > 30, RTRIM(LEFT([Overskrift], 27)) + '...', [Overskrift]) AS [Overskrift], [Type] FROM [nyhedsTabel] WHERE ([Type] = ?) ORDER BY [Id] DESC"
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
Computerworld tilbyder specialiserede kurser i database-management

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