从列表框中选择项目并将其显示到datagridview

时间:2019-10-08 00:11:32

标签: c# sql datagridview listbox

每当我尝试将列表框中的项目添加到datagridview时,它将返回system.data.datarowview

enter image description here 如何显示数据库中的所有值?我有一张桌子:ItemID,ItemName,Quantity,TransDate,ItemStatus

但我只希望将id,名称,数量显示在datagridview中

将项目从列表框中添加到datagridview的代码:

private void Checkout_Load(object sender, EventArgs e)
    {
        LoadData();
    }



    public void LoadData()
    {
        SqlConnection con = Connection.GetConnection();

        SqlDataAdapter sda = new SqlDataAdapter("Select * From [Inventory].[dbo].[Inventory]", con);

        DataTable dt = new DataTable();
        sda.Fill(dt);



        listBox1.DataSource = dt;
        listBox1.DisplayMember = "ItemName";
        listBox1.ValueMember = "ItemID";

        dataGridView1.Rows.Clear();


        foreach (var item in listBox1.SelectedItems)
        {
            int index = dataGridView1.Rows.Add();
            dataGridView1.Rows[index].Cells["Column1"].Value = item.ToString();
            dataGridView1.Rows[index].Cells["Column2"].Value = item.ToString();
            dataGridView1.Rows[index].Cells["Column3"].Value = textBox3.Text;
        }
    }





    private void buttonAddtoCart_Click(object sender, EventArgs e)
    {
        LoadData();
    }

3 个答案:

答案 0 :(得分:1)

首先要做的是创建一个保存数据的类(或结构,但最好是一个类)CartItem

public class CartItem
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Quantity { get; set; }

    public override string ToString()  // For displaying the Name in a listbox
    {
        return Name;
    }
}

然后,在您的应用程序中创建一个包含对象的List<CartItem>集合,并将该列表分配给DataSource的{​​{1}}属性。

DataGridView

然后添加新的List<CartItem> cartItems = new List<CartItem>(); dataGridView2.DataSource = cartItems; 的代码为:

CartItem

您可能需要配置datagrid视图以显示正确的列,您可以在此处进行检查:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview?view=netframework-4.8

答案 1 :(得分:0)

您需要写:

dataGridView2.Rows[idx].Cells["ID"].Value = item.ToString();

假设列表中的项目类型实现了适当的重写方法,否则您可以实现它,或者如果不能的话,可以使用嵌入式值包装器。

由于列表正确显示了字符串,因此已经完成了。

这是您想要做的:

using System;
using System.Windows.Forms;

namespace WindowsFormsAppTest
{

  public partial class FormTest : Form
  {

    public FormTest()
    {
      InitializeComponent();
    }
    private void FormTest_Load(object sender, EventArgs e)
    {
      listBox1.Items.Add(new CartItem { ID = 1, Name = "Item 1", Quantity = 10 });
      listBox1.Items.Add(new CartItem { ID = 2, Name = "Item 2", Quantity = 20 });
      listBox1.Items.Add(new CartItem { ID = 3, Name = "Item 3", Quantity = 30 });
      listBox1.Items.Add(new CartItem { ID = 4, Name = "Item 4", Quantity = 40 });
      dataGridView2.AutoGenerateColumns = false;
      dataGridView2.Columns.Add("ID", "ID");
      dataGridView2.Columns.Add("Name", "Name");
      dataGridView2.Columns.Add("Quantity", "Quantity");
    }
    private void ActionAddToCart_Click(object sender, EventArgs e)
    {
      if ( listBox1.SelectedItem != null )
        foreach ( CartItem item in listBox1.SelectedItems )
        {
          int index = dataGridView2.Rows.Add();
          dataGridView2.Rows[index].Cells["ID"].Value = item.ID;
          dataGridView2.Rows[index].Cells["Name"].Value = item.Name;
          dataGridView2.Rows[index].Cells["Quantity"].Value = item.Quantity;
        }
    }
    private void ActionClearCart_Click(object sender, EventArgs e)
    {
      dataGridView2.Rows.Clear();
    }
  }
  public class CartItem
  {
    public int ID { get; set; }
    public string Name { get; set; }
    public int Quantity { get; set; }
    public override string ToString()
    {
      return Name;
    }
  }
}

例如,如果要在列表上使用绑定,则可以使用@Stefan答案。

我建议使用带有BindingSource的ADO.NET数据表,以便能够很好地使用listview和datagridview项,而不会出现诸如编辑等UI和UX问题。

答案 2 :(得分:-1)

        if (listBoxContacts.SelectedItem != null)
            foreach (string item in listBoxContacts.SelectedItems)
            {
                int A = dataGridView1.Rows.Add();
                // dataGridView1.Rows[index].Cells[textBox1.Text].Value = item;
                dataGridView1.Rows[A].Cells[0].Value = textBox1.Text;
                dataGridView1.Rows[A].Cells[1].Value = textBox3.Text;
                dataGridView1.Rows[A].Cells[2].Value = textBox4.Text;
                dataGridView1.Rows[A].Cells[3].Value = textBox5.Text;
                dataGridView1.Rows[A].Cells[4].Value = textBox6.Text;

            }