C#使用以前的数据列值

  • 本文关键字:数据 c# datatable
  • 更新时间 :
  • 英文 :


在我的项目中。我有一个名为"过程"的数据表和一个按钮

单击"进程"按钮后,我的数据表列更改为新值(如下面编码(

是否可以将这些更改的值重新获得(在我单击按钮之前(,因为我需要与新值一起显示它们(当我单击按钮时(

这是我到目前为止编码的内容:

        for (int l = 0; l < my_datatable.Rows.Count; l++)
        {
            data_source = my_datatable.Rows[l][3].ToString();
            if (data_source.Contains("Cross Site Scripting"))
            {
                my_datatable.Rows[l][3] = "2";
            }
            else if (data_source.Contains("SQL Injection"))
            {
                my_datatable.Rows[l][3] = "3";
            }
            else if (data_source.Contains("Unicode Attack"))
            {
                my_datatable.Rows[l][3] = "4";
            }
            else if (data_source.Contains("Proxy Attack"))
            {
                my_datatable.Rows[l][3] = "5";
            }
            else
            {
                my_datatable.Rows[l][3] = "1";
            }
        }

如果您在更改数据之前复制数据,则应该可以做到。

var dataCopy = my_datatable.Copy();

您唯一要做的就是跟踪您更改了哪一行的字段。

考虑到它,使用以下一些可能会有更好的解决方案。我不记得没有研究的确切细节,但它们可能有些用。

 if (row.RowState == DataRowState.Modified)
 {
      var currentRow = row[0, DataRowVersion.Current];
      var previousRow = row[0, DataRowVersion.Proposed];
 }

您可以使用它来获得两个值

或也有

 var modifiedTable = my_datatable.GetChanges(DataRowState.Modified)

再次您好...我已经做了一些实验,我相信以下会做您需要的事情。它基于我创建的简单数据表。

            var data = new DataTable("Table1");
            data.Columns.Add(new DataColumn("Username", typeof(string)));
            data.Columns.Add(new DataColumn("UserId", typeof(int)));
            var row = data.NewRow();
            row["Username"] = "User1";
            row["Userid"] = 12356;
            data.Rows.Add(row);
            data.AcceptChanges();
            var originalTable = data.Copy();
            var rowToEdit = data.Rows[0];
            rowToEdit["Username"] = "User2";
            var rowPos = 0;
            foreach (DataRow dr in data.Rows)
            {
                if (dr.RowState == DataRowState.Modified)
                {
                    foreach (DataColumn c in dr.Table.Columns)
                    {
                        if (dr.ItemArray[c.Ordinal] != originalTable.Rows[rowPos].ItemArray[c.Ordinal] )
                        {
                            //Show Changed value
                            var x = originalTable.Rows[rowPos].ItemArray[c.Ordinal];
                        }
                    }
                }
                rowPos++;
            }

谢谢

var dictionary = new Dictionary<int, string>();
for (int l = 0; l < my_datatable.Rows.Count; l++)
{
    data_source = my_datatable.Rows[l][3].ToString();
    dictionary.Add(l, data_source);
    // ...
}
// Access:
dictionary[0] // Returns the previous string

我会选择使用Dictionary<TKey, TValue>根据DataTable中的行索引存储字符串。通过使用Dictionary<TKey, TValue>.Add(key, value)方法,它将其存储以供以后使用。

从中访问字符串值时,您可以将其视为关联数组,只使用Dictionary<TKey, TValue>[index]

希望这有所帮助!

最新更新