[ASP.net] Default Button voor TextBox in datagrid

Pagina: 1
Acties:

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Het leek mij handig om voor een textbox op een ASP.NET-webform een 'default-button' in te kunnen stellen zodat ik het text_changed event van asp.net niet hoef te gebruiken. Als de entertoets wordt ingedrukt terwijl een bepaalde textbox de focus heeft wordt het Click-event van een bepaalde button uitgevoerd i.p.v. text_changed.

Dit is volgens mij alleen client-side op te lossen en ik ben dus op zoek gegaan. Ik heb onderstaande code gevonden. In sub 'defaultbutton' staat het scriptje en in de page_load stel ik vervolgens de standaardbutton voor een bepaalde textbox in via 'DefaultButton(Page, TextBox, Button)':

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Public Sub DefaultButton(ByRef Page As System.Web.UI.Page, _
  ByRef objTextControl As TextBox, ByRef objDefaultButton As Button)

' Sets default buttons.

  Dim sScript As New System.Text.StringBuilder()
  sScript.Append("<SCRIPT language=""javascript"">" & vbCrLf)
  sScript.Append("function fnTrapKD(btn){" & vbCrLf)
  sScript.Append(" if (document.all){" & vbCrLf)
  sScript.Append("   if (event.keyCode == 13)" & vbCrLf)
  sScript.Append("   { " & vbCrLf)
  sScript.Append("     event.returnValue=false;" & vbCrLf)
  sScript.Append("     event.cancel = true;" & vbCrLf)
  sScript.Append("     btn.click();" & vbCrLf)
  sScript.Append("   } " & vbCrLf)
  sScript.Append(" } " & vbCrLf)
  sScript.Append("}" & vbCrLf)
  sScript.Append("</SCRIPT>" & vbCrLf)

  objTextControl.Attributes.Add("onkeydown", _
    "fnTrapKD(document.all." & objDefaultButton.ID & ")")

  Page.RegisterStartupScript("ForceDefaultToScript", sScript.ToString)

End Sub

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
  'Put user code to initialize the page here
  DefaultButton(Page, TextBox, Button)
End Sub


Echter, dit werkt niet in een datagrid. Ik wil dat als er gegevens worden ingevoerd via een datagrid (datagrid in EditItem) en de gebruiker drukt op enter terwijl een bepaalde textbox in de datagrid de focus heeft dat het UpdateCommand-event van de datagrid wordt uitgevoerd, dit blijkt niet te werken als ik de updatebutton aanroep in mijn code. Dit heb ik toegevoegd aan het Page_Load event:

Visual Basic .NET:
1
2
3
4
5
6
7
8
  If DataGrid.EditItemIndex <> -1 Then
    Dim txtInput As TextBox = _
      dgOrderRegels.Items(dgOrderRegels.EditItemIndex).FindControl("txtInput")
    Dim cmdUpdate As Button = _
      dgOrderRegels.Items(dgOrderRegels.EditItemIndex).FindControl("cmdUpdate")

    DefaultButton(Page, txtInput, cmdUpdate)
  End If


Het lijkt er dus op dat ik i.p.v. de button (cmdUpdate) direct het DataGrid.UpdateCommand event moet aanroepen, hiervoor moet ik dus waarschijnlijk wat wijzigen in de DefaultButton SUB. Ik krijg dit echter niet voor elkaar.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Werkt het met een gewone textbox en een gewone button?

Het zal te maken hebben met het feit dat je DataGrid meerdere items bevat met diezelfde controls erop. Daardoor wordt de event die door die buttonclick gegeneerd wordt doorgegeven naar de Command event van de datagrid. Het is dus idd de command-event die getriggered wordt, en niet de click-event van die button.
Hoe je in javascript die command-event kunt laten triggeren weet ik niet.


Trouwens, waarom gebruik je de 'RegisterStartUpScript' method, en niet de 'RegisterClientSideScriptBlock' method? Met RegisterStartUpScript wordt de client-side script toch al uitgevoerd bij het laden van de pagina? 't Lijkt me dat je dat niet wilt.

[ Voor 26% gewijzigd door whoami op 11-02-2004 15:10 ]

https://fgheysels.github.io/


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Werkt het met een gewone textbox en een gewone button?
Ja werkt prima....
Het zal te maken hebben met het feit dat je DataGrid meerdere items bevat met diezelfde controls erop.
Lijkt me niet want ik geef duidelijk aan welk object ik precies wil hebben door hem te declareren als button in de edititemindex, dan pak ik echt de juiste button. Dit werkt ook zo in andere gevallen.
Trouwens, waarom gebruik je de 'RegisterStartUpScript' method, en niet de 'RegisterClientSideScriptBlock' method? Met RegisterStartUpScript wordt de client-side script toch al uitgevoerd bij het laden van de pagina? 't Lijkt me dat je dat niet wilt.
Deze code stond op het forum van ASP.NET en aangezien het werkt met een gewone button en textbox denk ik dat het hier niet aan ligt....

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
EmilneM schreef op 11 februari 2004 @ 15:12:
Lijkt me niet want ik geef duidelijk aan welk object ik precies wil hebben door hem te declareren als button in de edititemindex, dan pak ik echt de juiste button. Dit werkt ook zo in andere gevallen.
Ja, maar het is niet die event die het updaten gaat gaan triggeren, dat doet de UpdateCommand event.
Deze code stond op het forum van ASP.NET en aangezien het werkt met een gewone button en textbox denk ik dat het hier niet aan ligt....
Dat zeg ik ook niet.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Wat een ranzig stukje code.. :X Volstrekt nutteloos om die parameters ByRef mee te geven, maar goed. En werkt ID? Moet dat niet ClientID zijn?

Digitaal onderwijsmateriaal, leermateriaal voor hbo