使用IList<T>填充DataGridView无数据显示问题求助
嘿,我来帮你排查这个头疼的问题!DataGridView绑定了非空IList
确保request类的属性是公共可访问的
DataGridView只能识别并绑定公共属性,如果你的request类里用的是私有字段或者没有get/set的属性,控件根本读不到数据。比如把:private string RequestNumber;改成:
public string RequestNumber { get; set; }所有要在表格里显示的字段,都得改成带get/set的公共属性才行。
验证Get_old_request_information()返回的集合真的有元素
别光看集合不为空,得确认里面实实在在有数据!在fillData方法里加个调试输出或者断点:void fillData(request request) { IList<request> old_request_to_display = request.Get_old_request_information(); // 调试用,确认集合里的元素数量 Console.WriteLine($"集合里有{old_request_to_display.Count}条数据"); dataGridView1.DataSource = old_request_to_display; }如果输出是0,那问题根源在
Get_old_request_information()方法里,得去检查这个方法的逻辑是不是没正确获取到数据。检查AutoGenerateColumns属性是否开启
这个属性默认是true,但万一你在设计器或者代码里把它改成false了,DataGridView不会自动生成列,就算绑定了数据源也看不到内容。可以在绑定前加上:dataGridView1.AutoGenerateColumns = true;或者直接去设计器里找到DataGridView的AutoGenerateColumns选项,把它勾上。
手动触发界面刷新(可选)
有时候绑定数据源后界面没及时更新,虽然大部分时候不需要,但可以试试在设置DataSource后加一句:dataGridView1.Refresh();确认request类有无参构造函数
虽然WinForms的DataGridView绑定一般不强制要求,但某些情况下没有无参构造函数可能导致绑定异常。给request类加个空的构造函数:public request() { }
修改后的示例代码
public partial class display_old_request : UserControl { public display_old_request(request request) { InitializeComponent(); fillData(request); this.Show(); } void fillData(request request) { IList<request> old_request_to_display = request.Get_old_request_information(); // 先验证集合数据 if(old_request_to_display.Count == 0) { Console.WriteLine("集合为空,请检查Get_old_request_information()方法逻辑"); return; } // 确保自动生成列开启 dataGridView1.AutoGenerateColumns = true; dataGridView1.DataSource = old_request_to_display; // 手动刷新界面(可选) dataGridView1.Refresh(); } }
按照上面的步骤排查,应该就能解决问题啦!
内容的提问来源于stack exchange,提问作者camrt

