每当我尝试将列表框中的项目添加到datagridview时,它将返回system.data.datarowview
如何显示数据库中的所有值?我有一张桌子: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();
}
答案 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;
}