Announcement

Collapse
No announcement yet.

Fokus auf Template Textbox in Gridview setzen

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

  • Fokus auf Template Textbox in Gridview setzen

    Hi habe folgendes Problem mit Asp.net 2.0.

    Ich hab ein Gridview mit ein paar Textboxen im Footer und möchte jedes mal wenn eine neue Zeile in das Gridview eingefügt worden ist, den Fokus (Textcursor) in die erste Textbox des Gridviews setzen.

    Dazu habe ich verschiedene Codevarianten ausprobiert. Ähnlich folgendem Snippet:

    Dim focusbox As TextBox = CType(gvT1.FooterRow.FindControl("txtT1Footer"), TextBox)
    focusbox.Text = "gefunden"
    focusbox.Focus()
    'den Text schreibt er in die Box also finden klappt, nur Fokus setzen nicht.

    Leider ohne Erfolg.

    wäre schön wenn mir jemand ein funktionierendes Codesnippet geben könnte.

    Grüße Cornflake

  • #2
    hab leider immer noch keine lösung bis jetzt gefunden, daher wäre würde ich mich immer noch über eine antwort freue

    Comment


    • #3
      Hallo,
      das Problem liegt darin, dass der Browser auf der Client-Seite für die Fokussierung verantwortlich ist. Der Server-Teil von ASP.NET kann jedoch nur HTML-Output generieren, der vom Browser interpretiert wird. Um das Problem zu lösen, muss der Server-Teil über <b>RegisterStartupScript</b> ein JavaScript mit zum Client schicken, damit dieses im Browser über den JavaScript-Aufruf <i>document.getElementById('xyz').focus()</i> den Fokus setzt

      Comment


      • #4
        hab leider immer noch keine lösung bis jetzt gefunden, daher wäre würde ich mich immer noch über eine antwort freue

        Comment


        • #5
          Danke für den Tip. Bin gerade dabei Ihn einzubauen. Dazu hat sich noch folgende Frage ergeben.
          Wenn ich serverseitig ein Control ansprechen will, geht es einfach über den vergebenen Namen, also bei einem Gridview eine Textbox im Footer ansprechen geht über <b>CType(gvT1.FooterRow.FindControl("txtT1Footer") , TextBox)</b>
          Aber clientseitig mit so einem <b>RegisterStartupScript</b> muss ich doch auch den clientseitig erzeugten Namen nutzen. Bei meinem Gridview ist der laut Quelltext.
          <b>"gvT1$ctl06$txtT1Footer"</b> Leider ändert sich hierbei immer mit jeder neuen Zeile der Part <b>$ctl06$</b>. Bisher habe ich beim RowCreated den Zählerwert mit
          <b>zeile = sender.rows.count
          zeile = zeile + 2</b>
          ermittelt. Das geht ja aber nicht überall und ist ausserdem ziemlich umständlich. Gibts da nicht vielleicht eine einfachere Möglichkeit clientseitig auf ein <b>runat="Server"</b> Control zuzugreifen

          Comment


          • #6
            Der Tip mit dem RegisterStartupScript hat leider in folgender Form nicht geklappt.
            <b>
            Protected Sub gvT1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
            zeile = sender.rows.count
            zeile = zeile + 2
            try
            Page.RegisterStartupScript("FocusT1Footer", "javascript:focument.getElementById('gvT1_ctl" + zeile.ToString("00") + "_txtT1Footer').focus();")
            Catch ex As Exception
            End Try
            End Sub
            </b>
            Ich vermute die weitere Schwierigkeit ist, das ich Atlas und das UpdatePanel verwende, wodurch das registrierte Startup-Script nicht ausgeführt wird, da ja nur der Teil mit der neuen Zeile in dem Gridview sich ändert

            Comment


            • #7
              Bräucht immer noch ne Antwort... hab glaube ich schon alles versucht kann doch nicht sein, das sowas nicht gehen sol

              Comment


              • #8
                ... :

                Comment


                • #9
                  Hallo,
                  wenn im Forum keiner antwortet, liegt bei keinem eine Lösung in der Werkzeugkiste (das Problem gehört nicht gerade zum Alltag).

                  Der Weg über RegisterStartupScript kann nur dann funktionieren, wenn der Name bekannt ist. Da dieser im konkreten Fall zur Laufzeit von ASP.NET generiert wird, muss die Anwendung auf Page-Ereignisse wie <b>PreRender</b> reagieren, um den aktuellen Namen im eigenen Script verbauen zu können.

                  Da ich selbst aber noch niemals so etwas in eigenen Projekten verwendet habe, kann ich kein Beispiel beisteuern

                  Comment


                  • #10
                    Ok
                    Vielen Dank für die Antwort, lieber bekomme ich so eine Antwort, als gar keine :

                    Comment

                    Working...
                    X