Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[ASP.Net] Meerdere nested gridviews

Pagina: 1
Acties:

  • DenDries
  • Registratie: Januari 2006
  • Laatst online: 27-11 08:28
Ik beschik over een database met 3 tabellen:
- model (modelid, modelnaam)
- domein (domeinid, modelid, domeinnaam)
- criteria (criteriaid, domeinid, criterianaam)

Een model bevat dus meerdere domeinen, terwijl een domein meerdere criteria bevat.

Mijn doel is nu om de data in deze tabellen weer te geven dmv nested gridviews.

bv.
Model 1
  1. [ul]Domein 1[/ul] [list=1] [ul]Criteria 1[/ul] [ul]Criteria 2[/ul] [/list] [ul]Domein 2[/ul] [list=1] [ul]Criteria 1[/ul] [ul]Criteria 2[/ul] [/list]
[code=asp]<asp:GridView ID="gvModel" runat="server" DataSourceID="sqlModel" AutoGenerateColumns="False" DataKeyNames="modelid" OnRowDataBound="gvModel_rowDataBound">
<Columns>
<asp:BoundField DataField="modelnaam" HeaderText="Modelnaam" SortExpression="modelnaam" />
<asp:TemplateField HeaderText="Domeinen">
<ItemTemplate>
<asp:GridView ID="gvDomein" runat="server" ShowHeader="False" OnRowDataBound="gvDomein_rowDataBound">
<Columns>
<asp:TemplateField HeaderText="Criteria">
<ItemTemplate>
<asp:GridView ID="gvCriteria" runat="server" ShowHeader="False">
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>[/code=asp]

[code=c#] protected void gvModel_rowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
using (SqlConnection Sconn = new SqlConnection(WebConfigurationManager.ConnectionStrings["Evaluatie"].ConnectionString))
{
GridView gvDomein = (GridView)e.Row.FindControl("gvModel");

SqlDataReader SDataReader;
SqlCommand Scomm = new SqlCommand();
Scomm.CommandText = "SELECT domeinid, domeinnaam FROM domein WHERE modelid=" + ((DataRowView)e.Row.DataItem)["modelid"].ToString();
Scomm.CommandType = CommandType.Text;
Scomm.Connection = Sconn;
Scomm.Connection.Open();
SDataReader = Scomm.ExecuteReader();

// gridview aanmaken
gvDomein.DataSource = SDataReader;
gvDomein.AutoGenerateColumns = false;
BoundField bfDomeinID = new BoundField();
bfDomeinID.DataField = "domeinid";
BoundField bfDomeinnaam = new BoundField();
bfDomeinnaam.DataField = "domeinnaam";
gvDomein.Columns.Add(bfDomeinID);
gvDomein.Columns.Add(bfDomeinnaam);
gvDomein.DataBind();
}
}
}[/code=C#]

In het geval van gvDomein_rowDataBound(), zou dat dan gewoon een kopie zijn van het bovenstaande die dan gewoon de criteria ophaalt.

Nu krijg ik 'De objectverwijzing is niet op een exemplaar van een object ingesteld.'
bij het stuk 'gvDomein.DataSource = SDataReader;'

Is dit uberhaupt de goede manier waarop ik dit probleem probeer aan te pakken? Waar doe ik het precies fout? :)

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:30

TeeDee

CQB 241

Wellicht gewoon debuggen en stap voor stap kijken waar je je null reference krijgt.

ASP.NET:
1
GridView gvDomein = (GridView)e.Row.FindControl("gvModel"); 

Dat zal null zijn. Zelf nadenken waarom dit null kan zijn?

[ Voor 48% gewijzigd door TeeDee op 25-02-2011 13:39 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

uhhhhhhh je zoekt naar de verkeerde GridView!

(GridView)e.Row.FindControl("gvModel") moet zijn GridView gvDomein = (GridView)e.Row.FindControl("gvDomein");

  • L-VIS
  • Registratie: April 2005
  • Laatst online: 15:50
Om te beginnen zorg dat je .NET in het Engels is ingesteld. Dat zoekt wel zo fijn op Google :). Daarnaast zoek je naar het verkeerde GridView, zie D32.

  • DenDries
  • Registratie: Januari 2006
  • Laatst online: 27-11 08:28
TeeDee schreef op vrijdag 25 februari 2011 @ 13:34:
Wellicht gewoon debuggen en stap voor stap kijken waar je je null reference krijgt.

ASP.NET:
1
GridView gvDomein = (GridView)e.Row.FindControl("gvModel"); 

Dat zal null zijn. Zelf nadenken waarom dit null kan zijn?
Heb al geprobeerd door te debuggen maar ik heb geen flauw idee wat er mis gaat.
Verwijderd schreef op vrijdag 25 februari 2011 @ 14:02:
uhhhhhhh je zoekt naar de verkeerde GridView!

(GridView)e.Row.FindControl("gvModel") moet zijn GridView gvDomein = (GridView)e.Row.FindControl("gvDomein");
EDIT: Er was een probleem met de database, het lijkt te werken nu!

Moest inderdaad zoals jullie het zeiden :) Bedankt!

[ Voor 17% gewijzigd door DenDries op 25-02-2011 14:37 ]