如何在C#窗口应用程序中动态添加行datagridview就像在Asp.net Web应用程序中添加到购物车而不使用数据库
问题描述:
我是jitendra kumar工作在库存管理系统和 我们有代码在我的dataGridview中添加一行在windows应用程序中使用列表提交,但是当我们通过点击按钮AddToCart购买新产品时,它将覆盖dataGridview中的前一行,但不会添加另一个新行dataGridview。如何在C#窗口应用程序中动态添加行datagridview就像在Asp.net Web应用程序中添加到购物车而不使用数据库
我想在dataGridview中添加新行,并且所有以前的行都保留在我的dataGridview中,就像Web应用程序项目中的添加到购物车选项一样,请任何人都可以提出一些想法来解决此问题。下面
感谢
是我的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
namespace SIMS1
{
public partial class Sales : Form
{
DataTable dt;
List<field> data = null; decimal Total = 0;
int Invoiceid,qty;
decimal unitprize,Total_amount;
public Sales()
{
InitializeComponent();
binddgvstock();
}
private void btn_save_Click(object sender, EventArgs e)
{
data = new List<field>();
string invoiceno = txt_invoiceno.Text;
if (string.IsNullOrEmpty(invoiceno))
{
string productname = txt_productname.Text;
decimal unitprize = Convert.ToDecimal(txt_unitprize.Text);
int Quantity = Convert.ToInt32(txt_qty.Text);
decimal total = Convert.ToDecimal(txt_totalamount.Text);
field f = new field();
f.ProductName = productname;
f.UnitPrize = unitprize;
f.Quantity = Quantity;
f.TotalAmount = total;
data.Add(f);
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = data.ToList();
}
else
{
string productname = txt_productname.Text;
decimal unitprize = Convert.ToDecimal(txt_unitprize.Text);
int Quantity = Convert.ToInt32(txt_qty.Text);
decimal total = Convert.ToDecimal(txt_totalamount.Text);
field f = new field();
f.ProductName = productname;
f.UnitPrize = unitprize;
f.Quantity = Quantity;
f.TotalAmount = total;
data.Add(f);
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = data.ToList();
}
txt_productname.Text = "";
txt_unitprize.Text = "";
txt_qty.Text = "";
txt_totalamount.Text = "";
}
}
[Serializable]
public class field
{
public int InvoiceId
{
get;
set;
}
public string InvoiceNo
{
get;
set;
}
public DateTime InvoiceDate
{
get;
set;
}
public string CustomerId
{
get;
set;
}
public string CustomerName
{
get;
set;
}
public string ProductName
{
get;
set;
}
public decimal UnitPrize
{
get;
set;
}
public int Quantity
{
get;
set;
}
public decimal DISC
{
get;
set;
}
public decimal TotalAmount
{
get;
set;
}
public decimal Total
{
get;
set;
}
}
}
答
随着你问题代码:
你正在创建每次单击保存以新的清单:
data = new List<field>();
此行需要删除。
替换List<field> data = null
;与List<field> data = new List<field>();
解决方案1:
使用BindingList<T>
代替List<T>
,如:
BindingList<field> data = new BindingList<field>();
代替: 列表数据= NULL;
使用此方法时,当您拨打data.Add(f);
时,该行将自动添加到网格中。无需重新分配数据源或刷新它。
解决方案2:
替换:
dataGridView1.DataSource = data.ToList(); //.ToList() is useless.
有了:
dataGridView1.DataSource = null;
dataGridView1.DataSource = data;
编后评论:
要删除行或多个SEL ected行,按钮点击逻辑:
foreach(DataGridViewRow gridRow in dataGridView1.SelectedRows)
{
var rowObject = gridRow.DataBoundItem as field; // field is the class name
data.Remove(rowObject);
}
非常感谢你..它的工作对我罚款 – user2342574
现在我想用在cell_click EVNT或按钮单击事件 – user2342574
答案编辑成包括C#代码删除从DataGridView行删除逻辑。 – user3185569