c#在datagridview中删除指定行并更新到数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#在datagridview中删除指定行并更新到数据库相关的知识,希望对你有一定的参考价值。
下面是删除指定的行并更新到库(实际上原理很简单,就是从数据库中删除选定的行,然后清除dataGridView中的所有数据再执行一次查询就行了):
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)try
string temp = "delete from qty where PartNum='" + dataGridView1["PartNum",indexrow].Value.ToString() + "'";
if (MSSQL.ExecuteQuery(temp))
AddControls a = new AddControls();
a.DeleteDataGridView(dataGridView1);
a.SetDataGridViewData(dataGridView1, str, sqldrr, ddrr);
catch
里面MSSQL.ExecuteQuery是这样定义的:
/// 执行sql语句
/// </summary>
/// <param name="cmdString">查询,更新,删除语句</param>
/// <returns>成功返回true,失败返回false</returns>
public static bool ExecuteQuery(string cmdString)
MsSql();
SqlConnection conn = new SqlConnection(connectString);
SqlCommand cmd = new SqlCommand(cmdString, conn);
cmd.CommandText = cmdString;
try
conn.Open();
if (cmd.ExecuteNonQuery() > 0)
conn.Close();
return true;
else
return false;
catch (SqlException Sqlex)
Console.WriteLine(Sqlex.Message);
return false;
参考技术A SqlCommand的用法啊。
如何在 Swift / iOS 中从 UITableView 中删除行并从 UserDefaults 中更新数组
【中文标题】如何在 Swift / iOS 中从 UITableView 中删除行并从 UserDefaults 中更新数组【英文标题】:How to delete rows from UITableView and update array from UserDefaults in Swift / iOS 【发布时间】:2021-09-16 09:12:45 【问题描述】:我已经通过this 从 UITableView 中删除行并从 UserDefaults 更新数组。但它没有用。
这是我从 tableview 中删除行的代码。但它没有存储在 userdefaults 中
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)
if editingStyle == .delete
cartArray.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
tableView.reloadData()
请建议我如何解决这个问题。提前致谢!
更新:
这是我的 cartViewController(电子商务应用程序)的完整代码:
import UIKit
class CartViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
var arrdata = [jsonstruct]()
var categorydata = [Categories]()
var imgdata = [Images]()
var cartArray = [CartStruct]()
@IBOutlet var cartTableView: UITableView!
@IBOutlet var totalCount: UILabel!
@IBOutlet var subtotalPrice: UILabel!
@IBOutlet var shippingPrice: UILabel!
@IBOutlet var totalPrice: UILabel!
@IBOutlet var proceedBtn: UIButton!
override func viewDidLoad()
super.viewDidLoad()
self.getCartData()
let userDefaults = UserDefaults.standard
guard let data = userDefaults.array(forKey: "myArrayKey") as? [CartStruct] else
return
cartArray = data
cartTableView.reloadData()
func getCartData()
let defaults = UserDefaults.standard
if let data = defaults.data(forKey: "cartt")
cartArray = try! PropertyListDecoder().decode([CartStruct].self, from: data)
cartTableView.reloadData()
func numberOfSections(in tableView: UITableView) -> Int
return 1
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return cartArray.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "CartCellTableViewCell", for: indexPath) as! CartCellTableViewCell
cell.cartImageView.downloadImage(from: cartArray[indexPath.row].cartItems.images.first?.src ?? "place_holder_image")
cell.productNameCart.text = cartArray[indexPath.row].cartItems.name
cell.prodductDescCart.text = cartArray[indexPath.row].cartItems.categories.first?.type
cell.productPriceCart.text = cartArray[indexPath.row].cartItems.price
cell.addBtn.addTarget(self, action: #selector(add(sender:)), for: .touchUpInside)
cell.addBtn.tag = indexPath.row
let cartQuantity = cartArray[indexPath.row].cartQuantity
cell.prodCount.text = "\(cartQuantity)"
if cartQuantity >= 0
cell.subBtn.isUserInteractionEnabled = true;
cell.subBtn.addTarget(self, action: #selector(sub(sender:)), for: .touchUpInside)
cell.subBtn.tag = indexPath.row
else
cell.subBtn.isUserInteractionEnabled = false;
return cell
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)
if editingStyle == .delete
cartArray.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
let userDefaults = UserDefaults.standard
userDefaults.set(cartArray, forKey: "myArrayKey")
@objc func add(sender: UIButton)
if cartArray[sender.tag].cartQuantity >= 0
cartArray[sender.tag].cartQuantity += 1
cartTableView.reloadData()
@objc func sub(sender: UIButton)
if cartArray[sender.tag].cartQuantity > 0
cartArray[sender.tag].cartQuantity -= 1
cartTableView.reloadData()
【问题讨论】:
您是否阅读了我在链接问题中的回答?顺便删除…reloadData()
。这是多余的。
是的。我阅读并实施。但是没有用。请建议我如何解决
请显示什么不起作用。我已经编辑了答案并将代码更新为 Swift 5。
是的,完全做到了这一点,并且出现类似错误(无论何时单击删除):“libc++abi.dylib:以 NSException 类型的未捕获异常终止 *** 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:'尝试为键 myArrayKey 插入非属性列表对象(“...”)'以 NSException 类型的未捕获异常终止”
您正在尝试对非属性列表对象进行操作。检查我的答案。
【参考方案1】:
您正在尝试对非属性列表对象进行操作。
您必须遵循以下提到的步骤:
根据“[CartStruct]”从 UserDefaults 解析您的购物车数据
检查并删除它。
删除后更新为 UserDefaults
重新加载您的 TableView
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)
if editingStyle == .delete
cartArray = self.updateCartItems(name: cartArray[indexPath.row].cartItems.name)
tableView.deleteRows(at: [indexPath], with: .fade)
这里,你需要检查并删除:
func updateCartItems(name: String) -> [CartStruct]
guard var cartItems = self.getCartData() else return []
cartItems = cartItems.filter( $0.cartItems.name != name )
if let updatedCart = try? PropertyListEncoder().encode(cartItems)
UserDefaults.standard.set(updatedCart, forKey: "cartt")
UserDefaults.standard.set(cartItems.count, forKey: "CountAddedProducts")
return cartItems
【讨论】:
以上是关于c#在datagridview中删除指定行并更新到数据库的主要内容,如果未能解决你的问题,请参考以下文章
C# winform DataGridView 如何实现删除 更新 手动绑定数据源(不是在控件里指定数据源) 求大神 在线等