【发布时间】:2020-09-13 13:11:44
【问题描述】:
我正在尝试制作购物车,当用户在产品表中选择行时,输入数量并单击“添加到购物车”,该行将转到购物车表。我可以做到,但图像列显示图像的 system.byte 插入。同样,当我选择新产品并将其添加到购物车时,购物车表中的前一行被覆盖而不是添加新产品。
public partial class AddToCartForm : Form
{
public AddToCartForm()
{
InitializeComponent();
}
private void AddToCartForm_Load(object sender, EventArgs e)
{
PopulateProductImageDgv("Select * from ProductDetailsTwo", ref dataGridView1);
dataGridView1.MultiSelect = false;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView2.RowTemplate.Height = 100;
dataGridView2.AllowUserToAddRows = false;
}
private void btnSaveToCart_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count > 0)
{
DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Name");
dt.Columns.Add("ImageData");
dt.Columns.Add("Qty");
foreach (DataGridViewRow dgvRow in dataGridView1.SelectedRows)
{
dt.Rows.Add(dgvRow.Cells[0].Value, dgvRow.Cells[1].Value, dgvRow.Cells[2].Value, txtqty.Text.ToString());
}
dataGridView2.DataSource = dt;
}
else
{
MessageBox.Show("select something");
}
}
public void PopulateProductImageDgv(string sql, ref DataGridView dg)
{
using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["cn"].ConnectionString))
{
connection.Open();
using (SqlCommand cmd = new SqlCommand(sql, connection))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable table = new DataTable();
//settings for dgv with image
dg.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dg.RowTemplate.Height = 100;
dg.AllowUserToAddRows = false;
da.Fill(table);
dg.DataSource = table;
DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
imageColumn = (DataGridViewImageColumn)dg.Columns[2];
imageColumn.ImageLayout = DataGridViewImageCellLayout.Stretch;
connection.Close();
}
}
}
}
【问题讨论】:
-
将
ImageData列的DataType 设置为DataType = typeof(Image)。从PopulateProductImageDgv()方法中删除ref。txtqty.Text.ToString()?txtqty.Text已经是一个字符串了。 -
@Jimi 它工作谢谢。我将类型更改为字节 []。我还有一个问题。购物车 datagridview 始终只显示 1 行。每当我添加另一个时,它都会覆盖上一行,
-
是的,好吧,这并不是绑定两个 DataGridView 控件的真正方法。无论如何,你可以设置
dataGridView2.DataSource = null; dataGridView2.DataSource = dt;。假设dataGridView1.SelectedRows包含多个引用。您可以添加一个复选框列以简化选择(对于用户和您)。之后了解如何使用 BindingSource 组件。这是一个生活改变者(是的,好吧,好吧......) -
顺便说一句,我只记得我发布了类似的内容(只是语言略有不同),它使用中间类模型简化了选择。 Here
-
用户一次只能选择一行,因为用户需要添加数量。数量也显示在购物车 datagridview 上。它仍然不允许我向卡 datagridview 添加新记录。现有记录仍被新添加的记录覆盖
标签: c# winforms datagridview datagridviewimagecolumn