Выбранный элемент из списка и отображение его в виде таблицы. - PullRequest
0 голосов
/ 08 октября 2019

Когда я пытаюсь добавить элемент из списка в список данных, он возвращает system.data.datarowview

enter image description here Как отобразить все значения из базы данных? У меня есть таблица: ItemID, ItemName, Количество, TransDate, ItemStatus

, но я хочу, чтобы только идентификатор, имя, количество отображалось в 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();
    }

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Первое, что нужно сделать, это создать класс (или структуру, но предпочтительно класс) 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 DataGridView.

List<CartItem> cartItems = new List<CartItem>();
dataGridView2.DataSource = cartItems;

Тогда код для добавления нового CartItem будет выглядеть следующим образом:

private void buttonAddcart_Click(object sender, EventArgs e)
{
    var newItem = new CartItem()
    {
        ID = GetNewID(),  // Implement a method that creates and returns a unique identifier
        Name = textbox_Name.Text,
        Quantity = (int)numericUpDown_Quantity.Value
    };

    cartItems.Add(newItem);
}

Возможно, вам потребуется настроить представление таблицы данных для отображения правильных столбцов, вы можете проверить этоздесь: https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview?view=netframework-4.8

0 голосов
/ 08 октября 2019

Вам необходимо написать:

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, если вы хотите использовать привязки в списке, например.

Я рекомендую использовать таблицу данных ADO.NET с BindingSource, чтобы иметь возможностьотлично работают с элементами списка и элементов таблицы данных без проблем с пользовательским интерфейсом и пользовательским интерфейсом, таких как редактирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...