Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET-在添加新行后刷新gridview(数据表源)(由计时器触发)_C#_Asp.net_Gridview_Timer_Datatable - Fatal编程技术网

C# ASP.NET-在添加新行后刷新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; 以下是加载页面上

我有一个计时器每分钟触发一次的方法,这个方法向DataTable添加一行。页面上有一个GridView,其中包含此DataTable作为其进程。每次添加一行时,I DataBind()-新行将显示在DataTable中(我可以在调试器中看到它),但不会显示在GridView中

我不会用代码压倒你,但我会尽力展示所有相关的东西

以下是计时器和数据表的声明源:

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上使用它,并在后面编写代码吗?非常感谢!这里有一个指向使用它的人的链接,可能会对您有所帮助: