Rendering a composite control and AssociatedHeaderCellID
- From: Ron Ruble <RonRuble@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Wed, 3 Jan 2007 12:10:01 -0800
I am trying to make a composite WebControl with a table as the primary control.
It's working, except for one thing; if I add in the AssociatedHeaderCellID,
it blows up in the Render method, with a System.NullReferenceException
exception: "Object reference not set to an instance of an object." I broke it
down in the Render method, so I render the table begin tag, the header row,
then the single data row. It works fine if I don't try to set the
AssociatedHeaderCellID.
I can find -very- little about the AssociatedHeaderCellID property, other
than the note that "If an element of the list is not recognized as a valid
table header cell an HttpException is thrown when the AddAttributesToRender
is invoked." which certainly describes the error.
I've checked the in the immediate window, and the header cell's control ID
matches the AssociatedHeaderCellID exactly. What am I doing wrong?
protected override void Render(HtmlTextWriter writer)
{
// _formulatable.RenderControl(writer);
_formulatable.RenderBeginTag(writer);
_formulatable.Rows[0].RenderBeginTag(writer);
_formulatable.Rows[0].RenderControl(writer);
_formulatable.Rows[0].RenderEndTag(writer);
for (int i = 1; i < _formulatable.Rows.Count; i++)
{
TableRow tr = _formulatable.Rows[i];
tr.RenderBeginTag(writer);
foreach (TableCell tc in tr.Cells)
{
tc.RenderBeginTag(writer);
tc.RenderControl(writer);
tc.RenderEndTag(writer);
}
tr.RenderEndTag(writer);
}
_formulatable.RenderControl(writer);
_formulatable.RenderEndTag(writer);
}
private static TableCell XNewRowCell(string ID, string AssociatedHeaderCellID)
{
TableCell tc;
tc = new TableCell();
tc.ID = ID;
tc.AssociatedHeaderCellID = new string[1]{AssociatedHeaderCellID};
tc.ColumnSpan = 1;
return tc;
}
protected override void CreateChildControls()
{
TableHeaderRow thr;
TableRow tr;
base.CreateChildControls();
_formulatable = new Table();
_formulatable.Visible = true;
thr = new TableHeaderRow();
_formulatable.Rows.Add(thr);
thr.Cells.Add(XNewHeaderCell("Remove Field", "RemoveField",
HorizontalAlign.Left, Unit.Pixel(20)));
thr.Cells.Add(XNewHeaderCell("Insert Field", "InsertField",
HorizontalAlign.Left, Unit.Pixel(20)));
thr.Cells.Add(XNewHeaderCell("(", "LeftParenthesis", HorizontalAlign.Left,
Unit.Pixel(20)));
thr.Cells.Add(XNewHeaderCell("Field Name", "FieldName",
HorizontalAlign.Left, Unit.Pixel(450)));
thr.Cells.Add(XNewHeaderCell("Operator", "Operator", HorizontalAlign.Left,
Unit.Pixel(190)));
thr.Cells.Add(XNewHeaderCell(")", "RightParenthesis", HorizontalAlign.Left,
Unit.Pixel(20)));
tr = new TableRow();
_formulatable.Rows.Add(tr);
tr.Cells.Add(XNewRowCell("TableCell1", "RemoveField"));
tr.Cells.Add(XNewRowCell("TableCell2", "InsertField"));
tr.Cells.Add(XNewRowCell("TableCell3", "LeftParenthesis"));
tr.Cells.Add(XNewRowCell("TableCell4", "FieldName"));
tr.Cells.Add(XNewRowCell("TableCell5", "Operator"));
tr.Cells.Add(XNewRowCell("TableCell6", "RightParenthesis"));
}
private static TableHeaderCell XNewHeaderCell(string CellText, string ID,
System.Web.UI.WebControls.HorizontalAlign HAlign,
System.Web.UI.WebControls.Unit Width)
{
TableHeaderCell tc;
tc = new TableHeaderCell();
tc.Text = CellText;
tc.ID = ID;
tc.HorizontalAlign = HAlign;
tc.Width = Width;
return tc;
}
.
- Next by Date: Re: Validator message disappeared after post back
- Next by thread: Re: Validator message disappeared after post back
- Index(es):