Announcement

Collapse
No announcement yet.

HyperLink Control in Table Cell einbauen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • HyperLink Control in Table Cell einbauen

    Hallo,

    entweder hat noch nie jemand das probiert was ich grad probiere, oder ich suche falsch

    Ich hab folgendes vor:

    In einem Gridview, welches manuell erstellt wird, soll ein Hyperlink Control in eine Zelle eingebunden werden.
    Das bisherige hilft mir da leider nicht, da die URL komplett anders ist und kein festes Schema hat.

    Sprich:

    ID | Name | URL

    Bisher habe ich:

    Code:
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "id";
    table.Columns.Add(column);
    [...]
    dann kommen später die einzelnen Tabellenzeilen:

    Code:
    row = table.NewRow();
    row["id"] = db.Rows[i][0].ToString(); //die daten aus der Tabelle
    Nun brauch ich folgendes:

    Code:
    HyperLink link = new HyperLink();
    link.Text = "Der Text halt";
    link.NavigateUrl = "http://example.org";
    Wie bekomme ich nun mit diesem Aufbau das Control in die entsprechende Zelle?

    Wenn ich es herkömmlich mach, bekomm ich natürlich nur:

    System.Web.UI.WebControls.HyperLink
    Aber ich finde keinen Weg um das Control an diese bestimmte Zelle zu binden.

    Weiß jemand weiter?

  • #2
    Hallo,

    In einem Gridview, welches manuell erstellt wird,
    so wie ich deinen Code interpretiere bindest du dann eine DataTable an das GridView.

    Wenn dem so sei kannst du in der aspx-Quelle ein TemplateField für die Spalte verwenden.
    [highlight=asp.net]
    <asp:GridView ID="GridView1" runat="server">
    <Columns>
    <asp:TemplateField>
    <ItemTemplate>
    <asp:HyperLink ID="myLink" runat="server" />
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>
    [/highlight]

    Der Link kann dann im RowDataBound-Ereignis gesetz werden:
    [highlight=c#]
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
    HyperLink myLink = e.Row.FindControl("myLink") as HyperLink;
    myLink.NavigateUrl = "http://www.mywebsite.at";
    }
    }
    [/highlight]
    Soll im RowDataBound-Ergeignishandler auf das zugrunde legende Datenobjekt zugegriffen werden so kann das mit
    [highlight=c#]
    e.Row.DataItem
    [/highlight]
    geschehen.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hallo,

      ja ich nutze DataTable (vergessen zu erwähnen )

      Jedoch habe ich immer unterschiedliche URLs und unterschiedliche Anchor Texte:

      href = aaa.aspx?id=23 -> Text= 23
      href = bbb.aspx?name=name -> Text = name
      href = http.... -> ext URl

      Die Daten sind jedoch nur zur Ausführung der Funktion bekannt. Sprich das RowDataBound kennt die Daten gar nicht (Also die URl und den Anchor Text)

      Oder sehe ich grad den Wald vor lauter Bäumen nicht?

      Comment


      • #4
        Die Daten sind jedoch nur zur Ausführung der Funktion bekannt
        Welche Funktion?

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          In der die Daten ausgelesen und bearbeitet werden.

          Das ganze ungefähr wie folgt:

          Daten aus DB -> Bearbeitung (hier auch die Links + Anchor Texte) -> Binden an ein DataView -> Binding ans Gridview

          Comment


          • #6
            Daten aus DB -> Bearbeitung (hier auch die Links + Anchor Texte) -> Binden an ein DataView -> Binding ans Gridview
            Beim Binden ans GridView sind somti die Links + Anchor Texte vorhanden. Im RowDataBound-Ereignis (tritt auf wenn die Daten ans GridView gebunden werden) sind somit die Werte vorhanden.

            D.h. im RowDataBound-Ereignis einfach im DataView die Url lesen (oder sonst wo).

            Die Umsetzung zeigt meine erste Antwort.

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Hallo,

              ich hab es jetz so gemacht (Quick & Dirty ich weiß)

              Das Feld mit dem Link ist ein Template Feld.
              Dort liegen 2 Labels (Einmal URL, einmal LinkText)
              + dem HyperlinkFeld

              Beim RowDataBound hole ich die Werte von den Labels und baue den Link zusammen.

              Bleibt aber nicht lange so, da mir die Lösung nicht gefällt.

              Comment


              • #8
                Im RowDataBound können die Werte doch direkt mit der e.Row.DataItem-Eigenschaft geholt werden.
                Dies setzt nur vorraus dass in der Datenquelle die Url und der Linktext gespeichert werden -> saubere Lösung.

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Das ist mein Task fürs Wochenende. :-)

                  Danke für die Hilfe

                  Comment


                  • #10
                    Bitte gerne.

                    Ebenfalls ein schönes Wochenende. Happy Coding (oder auch nicht).


                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment

                    Working...
                    X