Toon posts:

[asp.net C#]usercontrol en 2 datagrids

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik wil op een usercontrol 2 datagrids hebben. Wat is het probleem? Hij leest de datagrid niet uit. Echter als ik een webform gebruik met dezelfde code dan leest hij de 2 datagrids wel uit...

Jammergenoeg wil ikhet werkend hebben in een UserControl...

Dit is de code:

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
28
29
private void Page_Load(object sender, System.EventArgs e) 
{ 
  if ( !this.IsPostBack) 
  { 
    getGegevens(DataGrid1, "SELECT * FROM table1"); 
    getGegevens(DataGrid2, "SELECT * FROM table2"); 
  } 
} 


private void getGegevens(DataGrid d, string sql) 
{ 
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ConfigurationSettings.AppSettings["DBConnectionString"]); 

  OleDbCommand cmd = new OleDbCommand(); 
  cmd.Connection = con; 
  cmd.CommandText = sql; 

  OleDbDataAdapter da = new OleDbDataAdapter(); 
  da.SelectCommand = cmd; 
  DataSet ds = new DataSet(); 
  con.Open(); 
  da.Fill(ds); 
  con.Close(); 

  d.DataSource = ds; 
  d.DataBind(); 

}

[ Voor 7% gewijzigd door Verwijderd op 10-09-2003 11:37 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

definieer: hij leest de datagrid niet uit.

en daarnaast is dit een debugkwestie, imho. kijk waar je wel data hebt en waar niet. welke event worden gefired, in welke volgorde.

[ Voor 62% gewijzigd door gorgi_19 op 10-09-2003 11:39 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 10 September 2003 @ 11:38:
definieer: hij leest de datagrid niet uit.

en daarnaast is dit een debugkwestie, imho. kijk waar je wel data hebt en waar niet. welke event worden gefired, in welke volgorde.
Het gaat er juist om dat precies DEZELFDE datagrids, met precies dezelfde gegevens uit de database met precies dezelde programmeer code in de usercontrol niet wordt gelezen maar in de webform wel...
dat is toch vreemd?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 10 September 2003 @ 11:44:
Het gaat er juist om dat precies DEZELFDE datagrids, met precies dezelfde gegevens uit de database met precies dezelde programmeer code in de usercontrol niet wordt gelezen maar in de webform wel...
dat is toch vreemd?
Op basis van deze gegevens kan ik iig deze conclusie niet trekken.. Maar zoals ik al eerder zei: doorloop je code eens en zet een aantal breakpoints neer. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 25-05 11:09

dotcode

///\00/\\

Al met een debugger door heen gelopen om te kijken wat het excecutie pad is?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Ik dacht dat je je usercontrol niet kunt accessen in de Page_load, maar dat je dat pas kon vanaf de Page_PreRender method.
Verplaats die code dus eens naar die event-handler.

edit:
Ik denk dat gorgi daar ook al op zinspeelde...

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

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 10 September 2003 @ 11:50:
Ik dacht dat je je usercontrol niet kunt accessen in de Page_load, maar dat je dat pas kon vanaf de Page_PreRender method.
Verplaats die code dus eens naar die event-handler.

edit:
Ik denk dat gorgi daar ook al op zinspeelde...
offtopic:
Als je het over dynamische controls hebt, kan je dit ondervangen door CreateChildControls te overriden. De controls zijn vervolgens wel te benaderen in je Load-handler.

Echter, ik vond het vrij verbazend dat ze op TechEd'03 bij het voorbeeld van dynamische controls het load-event gebruikten en niet CreateChildControls. 't is iig de moiete waard om dit iets beter te onderzoeken

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
whoami schreef op 10 september 2003 @ 11:50:
Ik dacht dat je je usercontrol niet kunt accessen in de Page_load, maar dat je dat pas kon vanaf de Page_PreRender method.
Verplaats die code dus eens naar die event-handler.

edit:
Ik denk dat gorgi daar ook al op zinspeelde...
nee helaas... werkt niet

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Als ik het goed begrijp, heb je dus een usercontrol met daarin 2 datagrids.
Die datagrids worden in je usercontrol opgevuld in de Page_Load.

Je sleept die usercontrol naar je webform, en daar zie je dat de datagrids niet opgevuld zijn?

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Heb je in je web-pagina een member-variable gedefinieerd die die usercontrol voorsteld?

Bv, als het ID van de usercontrol die je op je form gesleept hebt, MyUserControl1 is, dan moet je deze member variabele aanmaken in je form:
code:
1
private MyUserControl MyUserControl1;


(Waar MyUserControl natuurlijk de class-name (type) is van die usercontrol).

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 10 September 2003 @ 12:19:
Heb je in je web-pagina een member-variable gedefinieerd die die usercontrol voorsteld?

Bv, als het ID van de usercontrol die je op je form gesleept hebt, MyUserControl1 is, dan moet je deze member variabele aanmaken in je form:
code:
1
private MyUserControl MyUserControl1;


(Waar MyUserControl natuurlijk de class-name (type) is van die usercontrol).
Waarom is dit noodzakelijk? Page.Loadcontrol(usercontrolename) moet toch ook werken?

VS.NEt is een beetje lui, imho, door op deze wijze te gaan werken. :)

[ Voor 14% gewijzigd door gorgi_19 op 10-09-2003 12:22 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Idd, maar kan je dan nog ergens die usercontrol benaderen?

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 10 september 2003 @ 12:23:
Idd, maar kan je dan nog ergens die usercontrol benaderen?
Is dit noodzakelijk dan? Hoort een usercontrol z'n eigen zaakjes niet zelf regelen?

Het kan evt wel, mits je een ID ergens definieert; dit kan ook in de Usercontrol zelf zijn, afaik.

Als je de parent de boel laat regelen, moet je idd wel aan de gang gaan.
Visual Basic .NET:
1
2
3
Dim __control as UserControl = Page.Loadcontrol("melp.ascx")
__control.ID = "testcontrol"
Me.Controls.Add(__control)


En dan aanroepen als:
Visual Basic .NET:
1
2
Dim __control as UserControl = CType(Me.Findcontrol("testcontrol"),Usercontrol)
__control.Visible = False

[ Voor 59% gewijzigd door gorgi_19 op 10-09-2003 12:27 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
gorgi_19 schreef op 10 september 2003 @ 12:24:
[...]

Is dit noodzakelijk dan? Hoort een usercontrol z'n eigen zaakjes niet zelf regelen?

Het kan evt wel, mits je een ID ergens definieert; dit kan ook in de Usercontrol zelf zijn, afaik.
Het kan toch zijn dat je vanop je webform een method van die usercontrol wilt aanroepen, of dat je usercontrol bv. een EventHandler property heeft, en dat je aan die event een eventhandler wilt hangen die je op je webform gedefinieerd hebt.

https://fgheysels.github.io/


Verwijderd

Topicstarter
heren dank voor alle reacties, ik heb vandaag geen tijd om ermee te stoeien, voorlopig (omdat het haast had) heb ik 2 aparte usercontrols aangemaakt...even een tijdelijke oplossing... to be continued...

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 10 September 2003 @ 12:26:
[...]


Het kan toch zijn dat je vanop je webform een method van die usercontrol wilt aanroepen, of dat je usercontrol bv. een EventHandler property heeft, en dat je aan die event een eventhandler wilt hangen die je op je webform gedefinieerd hebt.
Zie m'n edit. ;)

Je doelt waarschijnlijk op:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Protected Overrides Sub CreateChildControls
    Dim __linkbutton as LinkButton = new LinkButton()
    __linkbutton.ID = "testknopje"
    __linkbutton.CSS = "melpCSS"
    Addhandler __linkbutton.Click, New Eventhandler(Addressof Me.ButtonClick)
    Me.Controls.Add(__linkbutton)
 
    Dim __textBox as Textbox = new Textbox()
    __textbox.Id = "testTextbox"
    Me.Controls.Add(__textbox)

End Sub

Private Sub ButtonClick(Sender as object, e as eventargs)

    Dim __textBox as Textbox = Ctype(Me.Findcontrol("testTextbox"),TextBox)
    Dim __linkbutton as LinkButton = Ctype(sender, LinkButton)
    __textBox.Text = __linkbutton.ID

End sub


Ik vind alleen VS.Net vrij ranzig bezig als die maar overal textboxen global definieert. Binnen notime, zeker met een redelijk groot aantal, ben je de draad kwijt, imho. Zeker als je ze niet overal / vaak gebruikt.

* gorgi_19 heeft dus voornamelijk wat tegen het
C#:
1
private MyUserControl MyUserControl1;

[ Voor 18% gewijzigd door gorgi_19 op 10-09-2003 12:35 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Verwijderd schreef op 10 September 2003 @ 12:31:
heren dank voor alle reacties, ik heb vandaag geen tijd om ermee te stoeien, voorlopig (omdat het haast had) heb ik 2 aparte usercontrols aangemaakt...even een tijdelijke oplossing... to be continued...
Bedoel je nu dat het wel werkt als je slechts 1 datagrid in je usercontrol zet, maar dat het niet meer werkt van zodra je er 2 hebt?

Ik heb het net ff uitgeprobeerd, en het werkt hier perfect. Krijg je nergens errors, ben je wel zeker dat je je methods met de juiste parameters aanroept, ....

[ Voor 16% gewijzigd door whoami op 10-09-2003 13:08 ]

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
gorgi_19 schreef op 10 september 2003 @ 12:32:
[...]

Je doelt waarschijnlijk op:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Protected Overrides Sub CreateChildControls
    Dim __linkbutton as LinkButton = new LinkButton()
    __linkbutton.ID = "testknopje"
    __linkbutton.CSS = "melpCSS"
    Addhandler __linkbutton.Click, New Eventhandler(Addressof Me.ButtonClick)
    Me.Controls.Add(__linkbutton)
 
    Dim __textBox as Textbox = new Textbox()
    __textbox.Id = "testTextbox"
    Me.Controls.Add(__textbox)

End Sub

Private Sub ButtonClick(Sender as object, e as eventargs)

    Dim __textBox as Textbox = Ctype(Me.Findcontrol("testTextbox"),TextBox)
    Dim __linkbutton as LinkButton = Ctype(sender, LinkButton)
    __textBox.Text = __linkbutton.ID

End sub


Ik vind alleen VS.Net vrij ranzig bezig als die maar overal textboxen global definieert. Binnen notime, zeker met een redelijk groot aantal, ben je de draad kwijt, imho. Zeker als je ze niet overal / vaak gebruikt.

* gorgi_19 heeft dus voornamelijk wat tegen het
C#:
1
private MyUserControl MyUserControl1;
Global definieren? Je bedoelt als member-variabele definieren?
Nuja, elk z'n manier van werken natuurlijk, maar ik heb eigenlijk wat tegen die FindControl() manier van werken.
Als je de naam van je control gaat veranderen, dan heb je at compile time nergens een controle of je die naam ook overal in je code goed veranderd hebt.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

Global definieren? Je bedoelt als member-variabele definieren?
Je weet het.. :P Je moet bij mij niet voor naampjes aankomen... :+

Voor de rest weinig problemen mee gehad met verkeerde namen enzo.
* gorgi_19 klopt af *

[ Voor 28% gewijzigd door gorgi_19 op 10-09-2003 13:13 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

Probeer dit eens:


UserControl:
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
28
29
30
31
32
33
34
35
36
37
38
private void Page_Load(object sender, System.EventArgs e) 
{ 
  if ( !this.IsPostBack) 
  { 
    BindGrids();
  } 
} 

private void BindGrids()
{
  getGegevens(DataGrid1, "SELECT * FROM table1"); 
  getGegevens(DataGrid2, "SELECT * FROM table2");
}

public override void DataBind()
{
  BindGrids();
}

private void getGegevens(DataGrid d, string sql) 
{ 
  OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ConfigurationSettings.AppSettings["DBConnectionString"]); 

  OleDbCommand cmd = new OleDbCommand(); 
  cmd.Connection = con; 
  cmd.CommandText = sql; 

  OleDbDataAdapter da = new OleDbDataAdapter(); 
  da.SelectCommand = cmd; 
  DataSet ds = new DataSet(); 
  con.Open(); 
  da.Fill(ds); 
  con.Close(); 

  d.DataSource = ds; 
  d.DataBind(); 

}


Page:
code:
1
2
3
4
5
6
7
8
9
protected MyUserControl MyUserControl1;

private void Page_Load(object sender, System.EventArgs e)
{
  if ( !this.IsPostBack)
  {
    MyUserControl1.DataBind();
  }
}

Verwijderd

Topicstarter
whoami schreef op 10 September 2003 @ 13:03:
[...]


Bedoel je nu dat het wel werkt als je slechts 1 datagrid in je usercontrol zet, maar dat het niet meer werkt van zodra je er 2 hebt?
klopt whoami, 1 werkt wel en 2 grids niet... vaag he

riegstar ik zal jouw code ook eens testen vnvd..bedankt!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 10 September 2003 @ 16:36:
[...]


klopt whoami, 1 werkt wel en 2 grids niet... vaag he

riegstar ik zal jouw code ook eens testen vnvd..bedankt!
Ik zou eigenlijk zeggen: Zet je hele code eens online in aparte bestanden. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Verwijderd schreef op 10 september 2003 @ 16:36:
[...]


klopt whoami, 1 werkt wel en 2 grids niet... vaag he
Zeer vreemd. Debug je code eens, en ga na of je je methods wel goed oproept.
Ik heb net eens getest : een usercontrol gemaakt die 2 datagrids bevat, en die datagrids worden in de usercontrol ook op dezelfde manier opgevuld zoals jij dat doet, en dat werkt perfect.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ik zal ze vanavond ff online gooien mn bestanden... via mail? of pubje?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 10 september 2003 @ 17:16:
ik zal ze vanavond ff online gooien mn bestanden... via mail? of pubje?
Gewoon downloadbaar als zip? :) D'r zijn namelijk misschien meerdere die je kunnen helpen. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Ik heb hier net even zelf nog wat zitten uittesten en 'k zit met een vreemd probleem.

Ik heb ook ff een usercontrol gemaakt met 2 datagrids.
Als ik nu in de Page_Load van die UserControl m'n grids opvul is er niets aan de hand, en werkt alles:
Usercontrol:
code:
1
2
3
4
5
private void Page_Load(object sender, Eventargs e)
{
    this.BindGrid1("select * from employees");
    this.BindGrid2("select * from categories");
}


Ik wil nu echter die code (het inladen van de grid dus), verplaatsen naar m'n WebForm:

WebForm
code:
1
2
3
4
5
6
7
private MyGrids   MyGrids1;

private void Page_PreRender(object sender, EventArgs e)
{
    MyGrids1.BindGrid1("select * from categories");
    MyGrids1.BindGrid2("select  * from employees");
}


Dan krijg ik niets te zien, terwijl het dus wel werkt in de user-control zelf.

https://fgheysels.github.io/


Verwijderd

Topicstarter
heren ik heb de mijne ff in me pubje gezet hier dus

sln openen, in de map 'content' zit de usercontrol ucInformatie. Daar gaatet om...

[ Voor 4% gewijzigd door Verwijderd op 11-09-2003 11:01 ]


  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

Volgens mij gebruik je code van de IBuySpy Portal....
Zelf heb ik daar eigenlijk nog niet mee gestoeid.

Misschien kan je dan beter naar deze forum gaan:
http://asp.net/Default.aspx?tabindex=5&tabid=42
Pagina: 1