我有一个包含一系列事务对象的List。我要做的是在加载表单时在Datagridview控件中显示这些事务对象,基本上Datagridview应该表示事务寄存器的某些内容,以显示列表中每个事务对象的数据。
我必须承认在使用Datagridviews方面缺乏经验,而且我在理解我需要做什么方面遇到了一些困难。
我的问题是,如何获取列表中每个对象的详细信息以显示在Datagridview中?
这是我的代码。
首先是交易类:
public class Transaction
{
// Class properties
private decimal amount;
private string type;
private decimal balance;
private string date;
private string transNum;
private string description;
// Constructor to create transaction object with values set.
public Transaction(decimal amount, string type, decimal currBal, string date, string num, string descrip)
{
this.amount = amount;
this.type = type;
this.balance = currBal;
this.date = date;
this.transNum = num;
this.description = descrip;
}
// Get and Set accessors to allow manipulation of values.
public decimal Amount
{
get
{
return amount;
}
set
{
amount = value;
}
}
public string Type
{
get
{
return type;
}
set
{
type = value;
}
}
public decimal Balance
{
get
{
return balance;
}
set
{
balance = value;
}
}
public string Date
{
get
{
return date;
}
set
{
date = value;
}
}
public string TransNum
{
get
{
return transNum;
}
set
{
transNum = value;
}
}
public string Description
{
get
{
return description;
}
set
{
description = value;
}
}
public decimal addCredit(decimal balance, decimal credit)
{
decimal newBalance;
newBalance = balance + credit;
return newBalance;
}
public decimal subtractDebit(decimal balance, decimal debit)
{
decimal newBalance;
newBalance = balance - debit;
return newBalance;
}
}
}
现在是“注册”表单的代码:
public partial class Register : Form
{
List<Transaction> tranList = new List<Transaction>();
public Register(List<Transaction> List)
{
InitializeComponent();
this.tranList = List;
}
private void Register_Load(object sender, System.EventArgs e)
{
//regView represents the Datagridview that I'm trying to work with
regView.AutoSize = true;
regView.DataSource = tranList;
regView.Rows.Add(tranList[0]);
}
}
这是我得到的输出。
答案 0 :(得分:9)
真的有两种高级方法。
1)将手动创建的行直接添加到DataGridView
。在这种情况下,您必须在更改时手动更新/删除它们。这种方法是“好的”#34;如果您在初始化后不打算更改/更改显示内容。如果你这样做就变得站不住脚了。
要直接添加,您需要创建DataGridViewRow
,并使用各个值填充它,然后将DataGridViewRow
添加到DataGridView.Rows
。
2)数据绑定DGV。关于数据绑定到DataGridView
的文章很多。在某些情况下,将数据添加到DataTable
更容易,然后从中提取DataView
,并将DataGridView
绑定到DataView
。其他人发现直接绑定到集合更容易。
CodeProject有一篇不错的文章让你开始走这条道路,但快速的Google搜索会产生许多其他文章。
http://www.codeproject.com/Articles/24656/A-Detailed-Data-Binding-Tutorial
答案 1 :(得分:5)
用作DGV:
DataGridView groupListDataGridView;
柱:
DataGridViewTextBoxColumn groupListNameColumn;
列设置应如下所示:
groupListNameColumn.DataPropertyName = "name";
使用此属性,否则将添加所有列。
groupListDataGridView.AutoGenerateColumns = false;
像这样填充:
private void populateGroupList() {
groupListDataGridView.DataSource = null;
formattedGroupList = new SortableBindingList<DataGridGroupObject>();
foreach (GroupObject go in StartUp.GroupList) {
DataGridGroupObject dggo = new DataGridGroupObject();
dggo.id = go.Id;
dggo.name = go.Name;
formattedGroupList.Add(dggo);
}
groupListDataGridView.DataSource = formattedGroupList;
groupListDataGridView.Invalidate();
}
和型号:
public class DataGridGroupObject
{
public int id { get; set; } //this will be match id column
public string name { get; set; } // this will be match name column
}
答案 2 :(得分:2)
只需在顶部添加 using System.Linq;
。然后你可以这样做:
//This will create a custom datasource for the DataGridView.
var transactionsDataSource = tranList.Select(x => new
{
Amount = x.amount,
Type = x.type,
Balance = x.balance,
Date = x.date,
TransNum = x.transNum
Description = x.description
}).ToList();
//This will assign the datasource. All the columns you listed will show up, and every row
//of data in the list will populate into the DataGridView.
regView.DataSource = transactionsDataSource;