동작이 발생했습니다. GridView를 채우려 고 할 때 꽤 이해할 수 없습니다. 다음 코드를 고려다른 개체가 수정 될 때 개체의 변수가 변경됩니다.
DataTable table = GetStockMovement((int)ViewState[MOVEMENT_ID], false);
MovedProducts = from DataRow row in table.Rows
select new Product()
{
ProductId = (int)row["ProductId"],
ProductNo = row["ProductNo"].ToString(),
Name = row["ProductName"].ToString(),
Quantity = OriginalProducts.ToList().Find(p => p.ProductId == (int)row["ProductId"]).Quantity,
QuantityDiff = (int)row["Change"]
};
foreach (Product product in MovedProducts)
{
Console.WriteLine(product.ProductId + ": " + product.Quantity);
}
Console.WriteLine();
foreach (Product product in OriginalProducts)
{
product.Quantity -= 1000;
}
foreach (Product product in MovedProducts)
{
Console.WriteLine(product.ProductId + ": " + product.Quantity);
}
이것의 출력은 다음과 같았다 :
1: 10
2: 4
1: -990
2: -996
Product.Quantity는 INT MovedProducts 및 OriginalProducts가 ViewState에 저장되어있는 IEnumerables이다.
원본 제품을 변경하면 MovedProducts의 제품이 변경되는 이유는 무엇입니까? 그것들은 완전히 다른 두 대상이 다른 장소에 저장되어 있지 않습니까?
I 대신에 사용되는 LINQ 표현하면: 나는에 예상대로
List<FPRSProduct> completedProducts = new List<FPRSProduct>();
foreach (DataRow row in table.Rows)
{
Product tmp = new Product();
tmp.ProductId = (int)row["ProductId"];
tmp.ProductNo = row["ProductNo"].ToString();
tmp.Name = row["ProductName"].ToString();
tmp.Quantity = OriginalProducts.ToList().Find(p => p.ProductId == (int)row["ProductId"]).Quantity;
tmp.QuantityDiff = (int)row["Change"];
completedProducts.Add(tmp);
}
모든 것이 잘되었다, 즉 내가 이전과 OriginalProducts의 수량을 변경 한 후 같은 번호를 얻을 수있다.