Hej Det var visst templaten som strulade till det hela. Löste det hela genom att göra separata webusercontrols för header och footer. Kanske inte lika snygg lösning men vad att göra.Problem med template
Jag har gjort en template mha en WebUserControl och försöker skriva ut lite data i en DataGrid men stöter på problem. Använder jag inte templaten går det alldeles utmärkt. Då jag är nybörjare med ASP.NET har jag tyvärr lite svårt att se problemet och hoppas att någon kan hjälpa mig.
Jag får följande felmeddelande:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 42: tbl.Rows.Add(new object[] { 12, "String"} );
Line 43:
Line 44: this.DataGrid1.DataSource = tbl;
Line 45: this.DataGrid1.DataBind();
Line 46: }
Den klagar över DataGrid1.
Jag försöker exekvera följande:
<!--default.aspx-->
<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="salemtest.default1" %>
<%@ Register TagPrefix="example" TagName="template" Src="template.ascx"%>
<example:template id="template" title="Titel" runat="server">
<body>
tabell:<br />
<asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>
</body>
</example:template>
<!--Utdrag ur default.aspx.cs-->
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
DataTable tbl = new DataTable();
tbl.Columns.Add("Id", typeof(int));
tbl.Columns.Add("Text", typeof(string));
tbl.Rows.Add(new object[] { 12, "String"} );
this.DataGrid1.DataSource = tbl;
this.DataGrid1.DataBind();
}
<!--template.ascx-->
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="template.ascx.cs" Inherits="salemtest.template" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<%@ Register TagPrefix="login" TagName="loginform" Src="loginform.ascx"%>
<html>
<head>
<link rel="stylesheet" href="css/style.css">
<title>
<%=this.Title%>
</title>
<script runat="server">
/// <summary>
/// Insert the body the user provided in our body placeholder.
/// </summary>
protected override void CreateChildControls()
{
// insert the main content body if available
if( null != Body )
Body.InstantiateIn( bodycontainer );
}
</script>
</head>
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0">
<tr><td>
<table width="100%" height="150" background="img/top.jpg">
<tr>
<td width="65%"> </td>
<td width="35%">
<login:loginform runat="server" />
</td>
</tr>
</table>
</td></tr>
<tr><td>
<!-- Slut huvud -->
<table class="frame" width="100%" cellpadding="10" cellspacing="5">
<tr>
<td colspan="2" align="center">
<ul id="menu">
<li>Index </li>
<li>Index </li>
<li>Index </li>
<li>Index</li>
<li>Index</li>
</ul>
</td>
</tr>
<tr>
<td><asp:placeholder id="bodycontainer" runat="server"></asp:placeholder></td>
</tr>
</table>
<!-- fot -->
</td></tr>
<tr>
<td>
<table width="100%" height="86" background="img/foot.jpg"><tr><td> </td></tr></table>
</td>
</tr>
</table>
</body>
</html>
<!--template.ascx.cs-->
namespace salemtest
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for template.
/// </summary>
/// <summary>
/// The main template for this website.
/// </summary>
public abstract class template : UserControl, INamingContainer
{
/// <summary>
/// The main content template.
/// </summary>
private ITemplate main;
private void InitializeComponent()
{
}
protected System.Web.UI.WebControls.PlaceHolder bodycontainer;
/// <summary>
/// The name of the page.
/// </summary>
private string title;
/// <summary>
/// The main content template.
/// </summary>
public ITemplate Body
{
get { return this.main; }
set { this.main = value; }
}
/// <summary>
/// The name of the page.
/// </summary>
public string Title
{
get { return this.title; }
set { this.title = value; }
}
}
}
Säkert är det något enkelt fel :-).
Tack på förhand
Jonas Fredriksson
Sv: Problem med template