Label i Table ASP.NET - dziwne zachowanie
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" %>
Show
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 wogó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ć?
Odpowiedzi: 0
Strona 0 / 0