DataTable - 列名称:在两个不同的位置自动更改

时间:2017-07-11 12:50:30

标签: c# winforms

我有两个DataTable。我只是想将其中一个保存在另一个中,然后在我的“临时表”上更改列名。

我的问题是每次我从一个表中更改列名时,它会在另一个表中自动更改。

声明:

public DataTable DataTablefromDataBaseFormDataType { get; private set; }

如何获得第一个DataTable的值:

DataTablefromDataBaseFormDataType = ((FormProject)Fproject).DataTablefromDataBaseFormProject;

如何复制和更改列名称:

        DataTableUsedToPlotGraphTemp = DataTablefromDataBaseFormDataType;

    DataTableUsedToPlotGraphTemp.Columns[column_to_use].ColumnName = "temp";

其余代码(如果需要)

    DataTableUsedToPlotGraphTemp = DataTablefromDataBaseFormDataType;

    DataTableUsedToPlotGraphTemp.Columns[column_to_use].ColumnName = "temp";

//这一点! - 当我更改DataTableUsedToPlotGraphTemp时,它也在改变// DataTableUsedToPlotGraphTemp

    if (ReceiveStartDate == null && ReceiveEndDate == null)
    {
        ReceiveStartDate = DataTableUsedToPlotGraphTemp.Rows[0][4].ToString();
        ReceiveEndDate = DataTableUsedToPlotGraphTemp.Rows[DataTableUsedToPlotGraphTemp.Rows.Count-1][4].ToString();
    }

    if (ReceiveNameFile != "All files")
    {


        string query = $"TIME_FORMATTED >='{ReceiveStartDate}' AND TIME_FORMATTED <='{ReceiveEndDate}'";
        DataRow[] result = DataTableUsedToPlotGraphTemp.Select(query);


        foreach (DataRow row in result)
        {
            //MessageBox.Show(row[0].ToString());
            DataTableUsedToPlotGraph.ImportRow(row);
        }

    }
    else
    {
        DataRow[] result = DataTablefromDataBaseFormDataType.Select("FILE_NAMES = '"+ ReceiveNameFile + "'");

        foreach (DataRow row in result)
        {
            //MessageBox.Show(row[0].ToString());
            DataTableUsedToPlotGraph.ImportRow(row);
        }
    }



}

我已经多次调试,看看它是否发生在代码的其他地方。在更改列名称的那一刻,它会针对两个DataTables进行更改。

任何人都可以帮助我吗? 谢谢。

1 个答案:

答案 0 :(得分:2)

您没有两个不同的window.setTimeout(参考类型)但只有一个:

DataTables

所以,如果你换一个,你就会改变它们。这些只是引用同一对象的变量。您可以使用DataTableUsedToPlotGraphTemp = DataTablefromDataBaseFormDataType;

DataTable.Copy

如果您只需要一个包含相同列的空表,则可以使用DataTable DataTableUsedToPlotGraphTemp = DataTablefromDataBaseFormDataType.Copy();

也许this解释得更好一点:

  

对于值类型,值是信息本身。供参考   类型,该值是一个引用,可能是DataTable.Clone或可能是一种方式   导航到包含信息的对象。

     

例如,将变量视为一张纸。它可能   有价值&#34; 5&#34;或&#34;假&#34;写在上面,但它不能拥有我的   房子......它必须有我家的方向。那些   方向相当于参考。特别是两个   人们可能会有不同的纸张包含相同的纸张   到我家的方向 - 如果有人遵循这些指示   把我的房子涂成红色,然后第二个人会看到那个变化   太。如果他们在纸上只有我房子的单独照片,   那么一个人给他们的纸着色不会改变另一个人   人的论文。