C# 从列表中填充DataGridView

C# 从列表中填充DataGridView,c#,C#,我有一个字符串、int和object的列表。我需要用这些值填充datagridview,但是当我尝试填充对象值时,它不起作用 这是我的课堂宣言: public int ClientAddressId { get; set; } public int ClientId { get; set; } public CityModel City { get; set; } public CountyModel County { get; set; } public str

我有一个字符串、int和object的列表。我需要用这些值填充datagridview,但是当我尝试填充对象值时,它不起作用

这是我的课堂宣言:

public int ClientAddressId { get; set; }
    public int ClientId { get; set; }
    public CityModel City { get; set; }
    public CountyModel County { get; set; }
    public string StreetName { get; set; }
    public string StreetNo { get; set; }
这是我对返回列表的方法的声明:

public BindingList<ClientAddressModel> GetClientAddressBi(int clientId)
    {
        DAClientAddress dac = new DAClientAddress();
        DataTable dt = new DataTable();
        dt = dac.GetClientAddress(clientId);
    

        BindingList<ClientAddressModel> list = new BindingList<ClientAddressModel>();          
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            ClientAddressModel address = new ClientAddressModel();
            address.ClientAddressId = Convert.ToInt32(dt.Rows[i]["ClientAddressId"].ToString());
            address.ClientId = Convert.ToInt32(dt.Rows[i]["ClientId"].ToString());
            address.City = new CityModel
            {
                CityId = Convert.ToInt32(dt.Rows[i]["CityId"].ToString()),
                CityName = dt.Rows[i]["CityName"].ToString()
            };
            address.County = new CountyModel{
                CountyId = Convert.ToInt32(dt.Rows[i]["CountyId"].ToString()),
                CountyName = dt.Rows[i]["CountyName"].ToString()
            };                  
            address.StreetName = dt.Rows[i]["StreetName"].ToString();
            address.StreetNo = dt.Rows[i]["StreetNo"].ToString();

            list.Add(address);                

        }     
publicbindinglist GetClientAddressBi(int-clientId)
{
DAClientAddress dac=新的DAClientAddress();
DataTable dt=新的DataTable();
dt=dac.GetClientAddress(clientId);
BindingList=新建BindingList();
对于(int i=0;i
这就是我想填充datagrid视图的地方

BLClientAddress blca = new BLClientAddress();
        BindingList<ClientAddressModel> list = blca.GetClientAddressBi(PartnerId );
        dataGridClientAddress.DataSource = list;
BLClientAddress blca=new BLClientAddress();
BindingList=blca.GetClientAddressBi(PartnerId);
dataGridClientAddress.DataSource=list;
这就是我的应用程序返回的结果


对于这样一个简单的场景,我建议只需在CityModel和CountyModel类中为ToString方法添加一个覆盖

public class CityModel
{
   public int CityId { get; set; }
   public string CityName { get; set; }
   public override string ToString()
   {
       return CityName;
   }
}
public class CountyModel
{
   public int CountyId { get; set; }
   public string CountyName { get; set; }
   public override string ToString()
   {
       return CountyName;
   }
}

DataGridViewTextBoxColumn调用ToString()在County和City属性上获取要显示的值。如果不重写该方法,则获取对象的名称。通过重写,您将获得决定从该方法返回的内容。

对于像这样的简单场景,我建议只需在类CityModel和CountyModel中为ToString方法添加重写

public class CityModel
{
   public int CityId { get; set; }
   public string CityName { get; set; }
   public override string ToString()
   {
       return CityName;
   }
}
public class CountyModel
{
   public int CountyId { get; set; }
   public string CountyName { get; set; }
   public override string ToString()
   {
       return CountyName;
   }
}

DataGridViewTextBoxColumn调用County和City属性上的ToString()以获取要显示的值。如果不重写该方法,则获取对象的名称。通过重写,您将获得您决定从该方法返回的内容。

它看起来填充正确,但当您写入CityName=dt.Rows[i][“CityName”]时。ToString()它返回的是对象的名称,而不是实际值,因此该部分可能会让您感到困惑…删除ToString()并查看是否获得实际值为什么不创建一个ClientAddressViewModel类,其中包含要在网格中显示的属性?或者为ToString()添加覆盖方法,并返回您希望在列中显示的内容。看起来它填充正确,但当您编写CityName=dt.Rows[i][“CityName”].ToString()时,它返回的是对象的名称,而不是实际值,因此该部分可能会让您感到困惑…remove ToString()然后查看是否获得了实际值,为什么不创建一个ClientAddressViewModel类,其中包含要在网格中显示的属性?或者要在类County和City中添加ToString()方法的重写,并返回要在列中显示的内容