Witam,
mam prostą stronkę na której dynamicznie ładuję sobie 2x taką samą kontrolkę użytkownika. Oto kod:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace intranet
{
public partial class Calendar : System.Web.UI.Page
{
private int FCurrentMonth;
private MyCalendarControl[] FMyCalendarControl;

protected void Page_Load(object sender, EventArgs e)
{
this.FCurrentMonth = DateTime.Now.Month;
this.generateCalendar();
}

private void generateCalendar()
{
Control pCalendarControl;
MyCalendarControl pMyCalendarControl;

this.FMyCalendarControl = new MyCalendarControl[2];

pCalendarControl = LoadControl("MyCalendarControl.ascx");
pMyCalendarControl = (MyCalendarControl)pCalendarControl;
pMyCalendarControl.FCurrentMonth = this.FCurrentMonth;
pMyCalendarControl.FDepartmentID = 1;
this.MultiViewCalendarContainer.ActiveViewIndex = this.FCurrentMonth-1;
this.FMyCalendarControl[0] = pMyCalendarControl;
this.MultiViewCalendarContainer.Views[this.FCurrentMonth-1].Controls.Add(pMyCalendarControl);

pCalendarControl = LoadControl("MyCalendarControl.ascx");
pMyCalendarControl = (MyCalendarControl)pCalendarControl;
pMyCalendarControl.FCurrentMonth = this.FCurrentMonth;
pMyCalendarControl.FDepartmentID = 2;
this.MultiViewCalendarContainer.ActiveViewIndex = this.FCurrentMonth-1;
this.FMyCalendarControl[1] = pMyCalendarControl;
this.MultiViewCalendarContainer.Views[this.FCurrentMonth-1].Controls.Add(pMyCalendarControl);
}

}
}

Kontrolka użytkownika jest zbudowana w ten sposób:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyCalendarControl.ascx.cs" Inherits="intranet.MyCalendarControl" %>

<asp:linkbutton runat="server" id="ShowHideLayerButton" onclick="ShowHideLayerButton_Click">Show</asp:linkbutton>
<asp:label runat="server" id="Label1"></asp:label> <asp:table runat="server" id="TableDepartment"></asp:table>

Jedna kontrolka to jest warstwa, która ma się raz pokazywać a raz znikać po wciśnięciu przycisku Hide. Ponieważ na stronie wywołana jest 2x będą 2 warstwy z dwoma przyciskami Hide i dwiema zawartościami. Przycisk Hide uruchamia metodę ShowHideLayerButton_Click, która zdefiniowana jest w kontrolce.

Kontrolka ponadto zawiera Label1 na której coś jest wyświetlone oraz definicję tabeli.
Po wciśnięciu przycisku hide np w pierwszej warstwie Label1 w pierwszej warstwie (pierwszym wywołaniu kontrolki) chowa się, a w warstwie drugiej zostaje na wierzchu... co jest logiczne i jest OK. Inaczej natomiast zachowuje się TableDepartment. Chowają się tabele w obydwu warstwach. O co w ogóle chodzi? Czemu tak się dzieje?
Kod kontrolki poniżej:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace intranet
{
public partial class MyCalendarControl : System.Web.UI.UserControl
{
public int FCurrentMonth;
public int FDepartmentID;
public int FCurrentYear = 2008;

protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
this.generateCalendar();
}

protected void ShowHideLayerButton_Click(object sender, EventArgs e)
{
this.generateCalendar();

if (this.TableDepartment.Visible == true)
{
//this.myCalendarContent.Visible = false;
this.TableDepartment.Visible = false;
this.Label1.Visible = false;
}
else
{
this.TableDepartment.Visible = true;
this.Label1.Visible = true;
}
}

public void generateCalendar()
{
this.generateTableTitle();
this.Label1.Text = FCurrentMonth.ToString();
MyCalendarDataSetTableAdapters.logsTableAdapter pLogsAdapter = new MyCalendarDataSetTableAdapters.logsTableAdapter();
MyCalendarDataSet.logsDataTable pLogs = pLogsAdapter.addLog(this.FDepartmentID.ToString(), "bb");

}

private void generateTableTitle()
{
TableRow pTableRow = new TableRow();
TableCell pTableCell = new TableCell();

pTableCell.Text = "Name";
pTableCell.BorderWidth = 1;
pTableRow.Cells.Add(pTableCell);

DateTime pToday = new DateTime(this.FCurrentYear, this.FCurrentMonth, 1);

for (int i = 1; i <= 31; i++)
{
if (int.Parse(pToday.Month.ToString()) == this.FCurrentMonth)
{
pTableCell = new TableCell();
pTableCell.BorderWidth = 1;
pTableCell.Height = 20;
pTableCell.Width = 20;
pTableCell.Text = i.ToString();

pTableRow.Cells.Add(pTableCell);
pToday = pToday.AddDays(1);
}
else
{
break;
}
}
this.TableDepartment.Rows.Add(pTableRow);

}
}
}

Dzięki z góry
Rafał

Co zauważyłem... w tej chwili wiersze i komórki w tabeli generowane są dynamicznie. Jeżeli zakoduję komórki w pliku Calendar.aspx na stałe wszystko działa OK. Problem w tym, że ja potrzebuję wszystko mieć utworzone dynamicznie :( Jak mam to zrobić?