我有两张桌子。我正在尝试更新符合条件的记录。
虽然其中一个得到更新,但另一个没有。
这是OnNavigatedTo
方法。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
currentProduct = e.Parameter as Product;
NameBox.Text = currentProduct.Name;
ReadAllProductsList dbproduct = new ReadAllProductsList();
DB_ProductList = dbproduct.GetAllProducts();
var productQuery = DB_ProductList.Where(Product => Product.Name == currentProduct.Name.Trim());
List<Product> productList = new List<Product>();
productList = productQuery.ToList();
}
以下是更新产品方法:
private async void UpdateProduct_Click(object sender, RoutedEventArgs e)
{
currentProduct.Name = NameBox.Text;
Db_Helper.UpdateDetails(currentProduct);//Update selected DB product Id
List<Product2> product2List = new List<Product2>();
ReadAllProduct2List dbproduct2list = new ReadAllProduct2List();
DB_Product2 = dbproduct2list.GetAllProduct2();
product2List = DB_Product2.Where(Product2 => Product2.ProductId == NameBox.Text.ToString()).ToList();
for (int i = 0; i < product2List.Count -1; i++)
{
product2List[i].ProductId = NameBox.Text;
Db_Helper.UpdateProduct2Details(product2List[i]);
}
Frame.Navigate(typeof(ProductsPage));
}
第一次更新有效,第一次更新产品表。 第二个更新不起作用,就好像第二个类型的列表为空。 我不确定我做错了什么。
这是DB_Helper代码:
public void UpdateDetails(Product ObjProduct)
{
using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), App.DB_PATH))
{
var existingproduct = conn.Query<Product>("select * from Product where Id =" + ObjProduct.Id).FirstOrDefault();
if (existingproduct != null)
{
conn.RunInTransaction(() =>
{
conn.Update(ObjProduct);
});
}
}
}
和DB_Helper
:
DatabaseHelperClass Db_Helper = new DatabaseHelperClass();
如果第一个表只能包含一个产品,则第二个列表可以包含多个产品名称的行。这就是我遍历列表以更新Product2表的原因。
我已经测试了这个列表,但它并不是空的。
答案 0 :(得分:0)
确定。我设法通过使用foreach循环替换for循环来解决问题。
而不是:
cout<< static_cast<const void*>(x);
我写道:
for (int i = 0; i < product2List.Count -1; i++)
{
product2List[i].ProductId = NameBox.Text;
Db_Helper.UpdateProduct2Details(product2List[i]);
}
我不确定为什么for循环不起作用。