[英]ASP.NET - Make gridview (DataTable source) refresh after new row is added (triggered by timer)
我有一個由計時器每分鍾觸發一次的方法,並且該方法向DataTable添加一行。 頁面上有一個GridView,該表格以DataTable為課程。 每次添加一行時,我都會使用DataBind()-新行顯示在DataTable中(我可以在調試器中看到它),而不顯示在GridView中。
我不會用代碼讓您不知所措,但我會盡力顯示所有相關的內容。
這是計時器和DataTable源的聲明 :
static DataTable logTable;
System.Timers.Timer timeoutTimer;
這是在Page_Load上發生的事情:
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)));
}
}
初始化計時器的方法如下(它每分鍾都會成功觸發):
StopTime = DateTime.Now.AddMinutes(5);
timeoutTimer = new System.Timers.Timer(60000);
timeoutTimer.Interval = 60000;
timeoutTimer.Elapsed += new ElapsedEventHandler(RunningStatusesTick);
timeoutTimer.Start();
GC.KeepAlive(timeoutTimer);
這是tick方法 :
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);
}
}
這是將新行添加到DataTable的方法 (並做DataBind()):
private void recordResults(string ResultText, bool IsError = false)
{
DataRow logRow = logTable.NewRow();
logRow["Timestamp"] = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
logRow["Type"] = (IsError ? "ERROR" : "INFO");
logRow["Message"] = ResultText;
logTable.Rows.Add(logRow);
gvLogTable.DataSource = null;
gvLogTable.DataSource = logTable;
gvLogTable.DataBind();
}
最后,這是帶有gridview的aspx標記:
<body>
<form id="form1" runat="server">
<div>
<asp:GridView runat="server" id="gvLogTable"></asp:GridView>
</div>
</form>
</body>
</html>
我已經嘗試過的事情:
非常感謝! :)
在我看來,您的重新綁定是錯誤的。 在recordResults()函數中,最后三行如下:
gvLogTable.DataSource = null;
gvLogTable.DataSource = logRow;
gvLogTable.DataBind();
我認為您想綁定到logTable
,而不是logRow
。
或者,您是否嘗試過使用BindingListCollectionView和關聯的Refresh()方法? 我不確定它是否可以解決您的問題,但是可能值得一看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.