这可能看起来很简单,但我无法弄清楚如何做到这一点。我不是C#中数据绑定的专家。
我有一个Class对象列表(它是一个嵌套的Class),它看起来像这样:
public class IntVector
{
private string customerid;
private string hash_id;
private string client_name;
private string mobile_no;
private string address;
//Table
private List<CustomerInfo> customerinfo;
}
我有IntVector
private List<IntVector> UserData;
现在如何将CustomerInfo
设置为DatagridView
控件的数据源,该控件是列表UserData的成员。
由于
答案 0 :(得分:4)
首先,您必须以某种方式公开您的customerinfo列表(它现在是私有的,因此您无法从IntVector类之外获取它)。
如果是公开的:
BindingSource bs = new BindingSource();
int indexInUserDataList = 0;
bs.DataSource = UserData[indexInUserDataList].customerinfo;
datagridview.DataSource = bs;
此外,如果要以编程方式修改列表并希望将这些更改传播到控件(此处区别于List<T> vs BindingList<T> Advantages/DisAdvantages),您可能需要考虑使用BindingList而不是List。
您的CustomerInfo类是什么样的?我假设你想将DataGridView的列绑定到CustomerInfo类的公共属性,例如:
class CustomerInfo
{
public int Id {get;set;}
public string Name {get;set;}
public string Address {get;set;}
private string somePrivateData;
}
现在,如果DataGridView中的AutoGenerateColumns设置为true,那么将在DataGridView中自动创建3列“Id”,“Name”和“Address”。 “somePrivateData”将被忽略。
如果您想自己定义柱子,可以这样做:
// make sure to do it before binding DataGridView control
datagridview.AutoGenerateColumns = false;
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
col1.DataPropertyName = "Name";
col1.HeaderText = "Customer name";
col1.Name = "column_Name";
datagridview.Columns.Add(col1);
DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn();
col2.DataPropertyName = "Address";
col2.HeaderText = "Address";
col2.Name = "column_Address";
datagridview.Columns.Add(col2);
答案 1 :(得分:0)
您需要将私人客户列表设置为公开:
public class IntVector
{
private string customerid;
private string hash_id;
private string client_name;
private string mobile_no;
private string address;
//Table
public List<CustomerInfo> customerinfo;
}
private List<IntVector> UserData;
//Populate the UserData list here
然后您可以将数据源设置为DataGridView,如:
DataGridView.DataSource = UserData[0].customerinfo;
我希望有帮助...