【发布时间】:2018-05-15 13:01:03
【问题描述】:
绑定数据不适用于我的 datagridview。
这是.cs文件
using FirebirdSql.Data.FirebirdClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Magacin
{
public partial class AnalizaPartneraGlobal : Form
{
List<Int_String> partneri = Komercijalno.Partner.Lista();
List<NeaktivniPartner> neaktivniPartneri = new List<NeaktivniPartner>();
public AnalizaPartneraGlobal()
{
InitializeComponent();
dataGridView1.AutoGenerateColumns = true;
}
private void button1_Click(object sender, EventArgs e)
{
foreach(Int_String partner in partneri)
{
double danaBezProdaje = (DateTime.Today - Komercijalno.Partner.PoslednjaKupovina(partner._int)).TotalDays;
if ( danaBezProdaje > 31)
{
NeaktivniPartner np = new NeaktivniPartner();
np.ppid = partner._int;
np.naziv = partner._string;
np.danaBezKupovine = danaBezProdaje;
neaktivniPartneri.Add(np);
}
}
dataGridView1.DataSource = M.List.ConvertToDataTable(neaktivniPartneri);
dataGridView1.Refresh();
}
}
public class NeaktivniPartner
{
public int ppid;
public string naziv;
public double danaBezKupovine;
}
}
如你所见,我只有button 和dataGridView
如果我记得早些时候我一直在做 dataGridView.dataSource = myGenericList; 工作完美,但由于某种原因现在它无法正常工作,所以我尝试将其转换为 DataTable 但仍然无法正常工作。然后我添加了AutogenerateColumns,但仍然没有显示任何数据或列。之后尝试添加Refresh(),但仍然没有。
除此之外我尝试过:
- 删除 datagridview 并再次执行所有操作
- 关闭VS再打开
- 尝试使用
BindingList - 尝试将列表直接绑定到数据源
ConvertToDataTable背后的代码
public static DataTable ConvertToDataTable<T>(IList<T> data)
{
PropertyDescriptorCollection properties =
TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}
【问题讨论】:
-
能否也添加此调用背后的代码:ConvertToDataTable
-
@Isma 看看编辑
-
在分配数据表之前您是否尝试过设置
dataGridView1.DataSource = null? -
试过了,还是不行。我在按钮开始时添加了调试,单击以查看
list和datagridview.rows内的row.count()。首先单击两者返回 0(这是预期的),但第二次单击列表返回 20k 并且 dgv 返回 0。 -
我确信问题出在
NeaktivniPartner类上……它缺少getter 和setter。没有它们,DataGridView.DataSource将不知道要显示什么。
标签: c# winforms datagridview