修改数据表 C#

本文关键字:数据表 修改 | 更新日期: 2023-09-27 17:56:15

>我在数据表中有一个数据列表,我还有一个按钮,单击该按钮将显示上周已完成的行。

但是,由于某种原因,我无法在修改后更新表格

我得到 7 天前的日期,对于源 DataTable 中完成日期大于该日期的每一行,我都会删除该行。这应该让我只在上周完成行,但由于某种原因,在我的方法完成后,每一行都保留了下来。任何人都可以在这里发现问题吗?

提前感谢任何帮助!

protected void btnShowLastWeek_OnClick(Object sender, EventArgs e)
    {
        DateTime current = DateTime.Today;
        DateTime lastWeek = current.AddDays(-7);
        DataTable temp = compDV.Table;
        for(int i = 0; i < temp.Rows.Count; i ++)
        {
            DateTime completed = (DateTime)temp.Rows[i]["DateCompleted"];
            if (completed.CompareTo(lastWeek.Date) <= 0)
            {
                temp.Rows.RemoveAt(i);
            }
        }
        dgCompletedRequests.DataSource = temp;
        dgCompletedRequests.DataBind();
    }

修改数据表 C#

您应该改为绑定到DataView

dgCompletedRequests.DataSource =
    new DataView(compDV.Table, "DateCompleted > #" + lastWeek + "#");

我会从评论中遵循 SLaks 的建议,但归根结底,我也会考虑撑船并重写代码以查询数据表而不修改原始数据表。

dgCompletedRequests.DataSource = 
      temp.AsEnumerable()
          .Where(row => row.Field<Datetime>("DateCompleted") >= lastWeek)
          .AsDataView(); // or .CopyToDataTable(); if you need it

在执行此代码之前,dgCompleteRequests.DataSource 是否已经设置好了?我不确定这是否适合您,但过去对我有用,您可以尝试一下。设置 dgCompleteRequests.DataSource = null;然后将其设置为 Temp 之后。不知何故,我认为这将"重置"数据绑定。