C# ASP.NET-在添加新行后刷新gridview(数据表源)(由计时器触发)
我有一个计时器每分钟触发一次的方法,这个方法向DataTable添加一行。页面上有一个GridView,其中包含此DataTable作为其进程。每次添加一行时,I DataBind()-新行将显示在DataTable中(我可以在调试器中看到它),但不会显示在GridView中 我不会用代码压倒你,但我会尽力展示所有相关的东西 以下是计时器和数据表的声明源:C# ASP.NET-在添加新行后刷新gridview(数据表源)(由计时器触发),c#,asp.net,gridview,timer,datatable,C#,Asp.net,Gridview,Timer,Datatable,我有一个计时器每分钟触发一次的方法,这个方法向DataTable添加一行。页面上有一个GridView,其中包含此DataTable作为其进程。每次添加一行时,I DataBind()-新行将显示在DataTable中(我可以在调试器中看到它),但不会显示在GridView中 我不会用代码压倒你,但我会尽力展示所有相关的东西 以下是计时器和数据表的声明源: static DataTable logTable; System.Timers.Timer timeoutTimer; 以下是加载页面上
static DataTable logTable;
System.Timers.Timer timeoutTimer;
以下是加载页面上发生的情况:
protected void Page_Load(object sender, System.EventArgs e)
{
if (logTable == null)
{
logTable = new DataTable();
logTable.Columns.Add(new DataColumn("Timestamp", typeof(string)));
logTable.Columns.Add(new DataColumn("Type", typeof(string)));
logTable.Columns.Add(new DataColumn("Message", typeof(string)));
}
}
private void RunningStatusesTick(object sender, ElapsedEventArgs e){
try
{
string info = GetRawInfo();
recordResults(info);
}
catch (Exception ex)
{
// Error thrown? Catch it and record it.
recordResults(ex.Message, true);
}
}
以下是计时器初始化的方式(它每分钟都会成功启动):
下面是勾选方法:
protected void Page_Load(object sender, System.EventArgs e)
{
if (logTable == null)
{
logTable = new DataTable();
logTable.Columns.Add(new DataColumn("Timestamp", typeof(string)));
logTable.Columns.Add(new DataColumn("Type", typeof(string)));
logTable.Columns.Add(new DataColumn("Message", typeof(string)));
}
}
private void RunningStatusesTick(object sender, ElapsedEventArgs e){
try
{
string info = GetRawInfo();
recordResults(info);
}
catch (Exception ex)
{
// Error thrown? Catch it and record it.
recordResults(ex.Message, true);
}
}
下面是将新行添加到数据表的方法(并执行DataBind()):
最后,这里是带有gridview的aspx标记:
<body>
<form id="form1" runat="server">
<div>
<asp:GridView runat="server" id="gvLogTable"></asp:GridView>
</div>
</form>
</body>
</html>
我已经尝试过的事情:
- 将DataSource=null行放在创建新行的行之前
- 添加Response.Redirect(由于该方法是由计时器触发的,因此无法工作)
- 创建用于数据源的临时表(设置为静态表的信息)
非常感谢!:) 在我看来,你的重新绑定是不正确的。在recordResults()函数中,最后三行如下所示:
gvLogTable.DataSource = null;
gvLogTable.DataSource = logRow;
gvLogTable.DataBind();
我认为您希望绑定到logTable
,而不是logRow
或者,您是否尝试过使用和关联的方法?我不确定它是否能解决您的问题,但它可能值得一看。哇!当我回滚我所做的一些更改以便有更清晰的内容显示在这里时,我意外地将其放入了。谢谢你抓住我的错误。我现在就试试BindingListCollectionView。大家好,我一直在想如何使用BindingListCollectionView来实现这一点,但没有用。我不知道如何将它用作标记,或者与gridview一起使用(或者需要与之一起使用的任何其他东西)。您能大致告诉我如何在aspx上使用它,并在后面编写代码吗?非常感谢!这里有一个指向使用它的人的链接,可能会对您有所帮助: