[ASP.NET] Controls DataGrid aanspreken in Page_Load

Pagina: 1
Acties:

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
In de Page_Load van een ASP.NET-webapplicatie wil ik regelen dat bepaalde controls (edit- en delete-buttons) van een datagrid gedisabled worden.

Deze knoppen moeten dan weer enabled worden als ik op een bepaalde knop klik.

Hoe spreek ik de controls van een datagrid aan in de page_load?

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Volgens mij moet het iets zijn wat hier op lijkt, maar kom er nog niet uit.

Visual Basic .NET:
1
DataGrid.Items.Item.Cells(2).Controls(1).Enabled = False

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Zoek me suf via Google en MSDN maar heb het nog steeds niet opgelost. Weet iemand de oplossing?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Gewoon de Visible property van een column op false zetten. :?

Wil je het per cel dan, dan moet je ItemDataBound event van de datagrid gaan afvangen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
gorgi_19 schreef op 06 november 2003 @ 15:44:
Gewoon de Visible property van een column op false zetten. :?

Wil je het per cel dan, dan moet je OnItemBound event van de datagrid gaan afvangen.
OK, visible property werkt goed, bedoel alleen eigenlijk dat de knoppen nog wel zichtbaar zijn maar dat je er niet op kunt klikken (enabled = false).

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Je kan in de ItemDataBound event van je grid toch het volgende doen:

code:
1
e.Item.Cells[x].Enabled = false;


Oja, gebruik misschien in't vervolg de edit-functie eens, ipv iedere keer een nieuwe reply te posten..

[ Voor 36% gewijzigd door whoami op 06-11-2003 16:00 ]

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 06 november 2003 @ 15:59:
Je kan in de ItemDataBound event van je grid toch het volgende doen:

code:
1
e.Item.Cells[x].Enabled = false;
Moet je niet de controls paken ipv de cells? Linkbutton lijkt me namelijk een control; wel moet je controleren denk ik wat het ItemType is van e.Item ; zeker als je in het ItemDataBound zit.

[ Voor 22% gewijzigd door gorgi_19 op 06-11-2003 16:33 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
't Zou kunnen.
'k Heb het nog nooit nodig gehad, en ook niet getest. :P :+

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 06 november 2003 @ 16:32:
't Zou kunnen.
'k Heb het nog nooit nodig gehad, en ook niet getest. :P :+
* gorgi_19 eigenlijk ook niet.. :P

'k kan me ook makkelijkere methodieken voorstellen. :P Maak zelf een eigen custom control aan, waarbij je alle linkbuttons standaard op disabled zet. Vervolgens zet je de visibility op false.

Als je dan op een knop drukt, dan wordt de visibility true; en van de 'echte' linkbuttons false.

Ik weet namelijk ook niet wat eerder komt; Click-event c.q. PostBack event of ItemDataBound-event.

[ Voor 13% gewijzigd door gorgi_19 op 06-11-2003 16:35 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Iets wat hier op aansluit.

Hoe geef je een control in een datagrid (in dit geval een textbox) de focus als er een bepaalde actie buiten de datagrid plaatsvindt. Met deze code werkt het niet omdat het buiten de datagrid plaatsvindt:

Visual Basic .NET:
1
e.item.cells(2).control(1)


Het lukt me al wel als ik de EditCommand van de datagrid aanspreek door op 'Edit' in de Editcolumn te klikken:

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
'Verzorgt via javascriptje het verkrijgen van de focus en het vervolgens
'selecteren van text in de textbox.
Private Sub SelectText(ByVal ctrl As Control)
        Dim focusScript As String = "<script language='javascript'>" & _
        "document.getElementById('" + ctrl.ClientID & _
        "').focus();document.getElementById('" + ctrl.ClientID & _
        "').select();</script>"

        Page.RegisterStartupScript("FocusScript", focusScript)
End Sub

Private Sub dgOrderRegels_EditCommand(ByVal source As Object, _
  ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
  Handles dgOrderRegels.EditCommand
        daOrderRegels.SelectCommand.CommandText = "SELECT * FROM " & _       
           "OrderRegels WHERE OrderID = '" & txtOrderID.Text & "'"
        daOrderRegels.Fill(DsOrderRegels1)
        dgOrderRegels.EditItemIndex = e.Item.ItemIndex
        dgOrderRegels.DataBind()
        Dim ctrAantal As Control = e.Item.Cells(2).Controls(1)
        ctrAantal.ID = "txtAantal"
        SelectText(ctrAantal)
End Sub


Hoe krijg ik dit voor elkaar van buiten de datagrid?

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Je zult ergens dit moeten gaan doen:
code:
1
MyDataGrid.SelectedIndex = IndexVanHetTeEdittenItem;


Op die manier komt de rij die je wilt wijzigen in edit-mode.
Kan je trouwens geen gebruik maken van een EditCommandColumn?

[ Voor 16% gewijzigd door whoami op 11-11-2003 09:17 ]

https://fgheysels.github.io/


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
whoami schreef op 11 november 2003 @ 09:17:
Je zult ergens dit moeten gaan doen:
code:
1
MyDataGrid.SelectedIndex = IndexVanHetTeEdittenItem;


Op die manier komt de rij die je wilt wijzigen in edit-mode.
Kan je trouwens geen gebruik maken van een EditCommandColumn?
Ik moet eigenlijk in het EditCommand_event van de datagrid zien te komen zonder op 'Edit' in de EditCommandColumn te klikken......is dat mogelijk?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

't is gewoon een sub, die je kan aanroepen. Alleen kunnen de parameters tot gekke dingen leiden.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
EmilneM schreef op 11 november 2003 @ 08:43:
Iets wat hier op aansluit.

Hoe geef je een control in een datagrid (in dit geval een textbox) de focus als er een bepaalde actie buiten de datagrid plaatsvindt. Met deze code werkt het niet omdat het buiten de datagrid plaatsvindt:

Visual Basic .NET:
1
e.item.cells(2).control(1)


Het lukt me al wel als ik de EditCommand van de datagrid aanspreek door op 'Edit' in de Editcolumn te klikken:

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
'Verzorgt via javascriptje het verkrijgen van de focus en het vervolgens
'selecteren van text in de textbox.
Private Sub SelectText(ByVal ctrl As Control)
        Dim focusScript As String = "<script language='javascript'>" & _
        "document.getElementById('" + ctrl.ClientID & _
        "').focus();document.getElementById('" + ctrl.ClientID & _
        "').select();</script>"

        Page.RegisterStartupScript("FocusScript", focusScript)
End Sub

Private Sub dgOrderRegels_EditCommand(ByVal source As Object, _
  ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
  Handles dgOrderRegels.EditCommand
        daOrderRegels.SelectCommand.CommandText = "SELECT * FROM " & _       
           "OrderRegels WHERE OrderID = '" & txtOrderID.Text & "'"
        daOrderRegels.Fill(DsOrderRegels1)
        dgOrderRegels.EditItemIndex = e.Item.ItemIndex
        dgOrderRegels.DataBind()
        Dim ctrAantal As Control = e.Item.Cells(2).Controls(1)
        ctrAantal.ID = "txtAantal"
        SelectText(ctrAantal)
End Sub


Hoe krijg ik dit voor elkaar van buiten de datagrid?
Ben er weer ff mee bezig maar krijg het maar niet voor elkaar. Heb het ook geprobeerd met dgOrderRegels.FindControl("txtAantal"), maar dan krijg ik de volgende foutmelding:

'De objectverwijzing is niet op een exemplaar van een object ingesteld.'

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Je moet wel aangeven op welk item je die control wilt zoeken he.

Zie ook hier:
[rml]whoami in "[ ASP.NET] Updaten van gegevens in een da..."[/rml]

[ Voor 40% gewijzigd door whoami op 24-11-2003 11:23 ]

https://fgheysels.github.io/


  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

In mijn tool-kit heb ik oa. de volgende code opgenomen:
code:
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
public static void SetInitialFocus(System.Web.UI.Control ctrl)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("<SCRIPT language=\"JavaScript\">\n");
            sb.Append("function SetInitialFocus()\n");
            sb.Append("{\n");
            // IF EXISTS CONTROL
            sb.Append(" if (document.getElementById('"+ctrl.ClientID+"'))\n");
            sb.Append(" {\n");
            sb.Append("     document.getElementById('"+ctrl.ClientID+"').focus();\n");
            sb.Append("     if (document.getElementById('"+ctrl.ClientID+"').type== 'text' || document.getElementById('"+ctrl.ClientID+"').type== 'textarea')\n");
            sb.Append("     {\n");
            sb.Append("         document.getElementById('"+ctrl.ClientID+"').select();\n");
            sb.Append("     }\n");
            sb.Append(" }\n");
            sb.Append("}\n");
            if (ctrl.Page.SmartNavigation)
            {
                sb.Append("window.setTimeout(SetInitialFocus, 200);\n");
            }
            else
            {
                sb.Append("window.onload = SetInitialFocus;\n");
            }
            sb.Append("</SCRIPT>\n");
            ctrl.Page.RegisterClientScriptBlock("SETINITIALFOCUS",sb.ToString());
        }


en als je daarna in het ItemDataBound event deze methode aanroept krijg het control de focus.

code:
1
2
3
4
5
6
7
8
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.EditItem)
            {
                TextBox txtAantal = (TextBox)e.Item.FindControl("txtAantal");
                SetInitialFocus(txtAantal);
            }
        }


Works for me. :)
Pagina: 1