我在更新面板中有一个表,应该每5秒刷新一次。 UpdatePanel刷新时设置lblDate
。页面加载上设置了lblAddress
。两者似乎都运转正常。
<asp:UpdatePanel ID="pnlreport" runat="server">
<ContentTemplate>
<asp:Table ID="tblReport" runat="server">
<asp:TableRow>
<asp:TableCell ColumnSpan="2">
<asp:Label runat="server" ID="lblDate" />
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell ColumnSpan="2">
<asp:Label runat="server" ID="lblAddress" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
<asp:Timer runat="server" ID="tmrUpdate" Interval="5000" OnTick="tmrUpdate_Tick" />
</ContentTemplate>
</asp:UpdatePanel>
每次表格刷新时,我都会在表格中添加行。
protected void tmrUpdate_Tick(object sender, EventArgs e)
{
// Update the timestamp on the report
lblDate = DateTime.Now.toString();
setupTables();
tmrUpdate.Interval = 5000; // Reset the timer
}
函数setupTables()
用于清除表中的任何数据,然后将最新数据添加回表中。但是我希望保留两个硬编码的行,因为它们可以作为一种&#34;标题&#34;。这是我遇到问题的地方。
protected void setupTables(ServiceStatus data)
{
// Clear all but the header rows
for (int i = 2; i < tblReport.Rows.Count; i++)
tblReport.Rows.RemoveAt(i); // A breakpoint here never gets hit.
// Populate the table with new rows
TableRow fakeDataRow = new TableRow();
TableCell tc = new TableCell();
tc.Text = "Fake text for Cell 1";
fakeDataRow.Cells.Add(tc)
tc = new TableCell();
tc.Text = "Fake text for Cell 2";
fakeDataRow.Cells.Add(tc)
tblReport.Rows.Add(fakeDataRow);
}
在回发时,我注意到清除旧行的for
循环从未被击中。添加我的假表后,我的表显然有三行,但它在回发时就消失了。所以我添加了这一行来看看发生了什么。
fakeDataRow.ID = "trFakeData";
但是,页面会抛出类似&#34的错误;已经添加了具有相同键的项目&#34;第二次刷新后。如果已经有一行带有该键,它在哪里,以及如何正确删除它?
答案 0 :(得分:1)
试试这个。如果循环遍历元素并按原样删除索引,那么你的循环和索引会变得混乱(你必须反过来为了不搞乱它,例如,从count-1开始,然后我 - 。)
protected void setupTables(ServiceStatus data)
{
// Clear all but the header rows
TableRow header1 = tblReport.Rows[0];
TableRow header2 = tblReport.Rows[1];
tblReport.Rows.Clear();
tblReport.Rows.Add(header1);
tblReport.Rows.Add(header2);
//... the rest of your logic to add fake data...
}