当前位置: 首页 > 编程语言 > C#

C#将DataTable绑定到现有的DataGridView列定义Share

时间:2023-04-10 21:47:48 C#

C#将DataTable绑定到现有的DataGridView列定义我正在尝试创建并填充DataTable,然后在DataGridView控件中显示结果。基本代码如下,当我调用新的UpdateResults_Delegate时,执行停止并出现NullReferenceException。奇怪的是,我可以在从QueryEventEntries返回之前成功跟踪entries.Rows.Count,因此我至少可以证明1)条目不是空引用,以及2)DataTable包含数据行。我知道我一定做错了什么,但我不知道是什么。privatevoidUpdateResults(DataTableentries){dataGridView.DataSource=entries;}privatevoidbutton_Click(objectsender,EventArgse){PerformQuery();}privatevoidPerformQuery(){DateTimestart=newDateTime(dateTimePicker1.Value.Year,dateTimePicker1.Value.Month,dateTimePicker1.Value.Day,0,0,0);DateTimestop=newDateTime(dateTimePicker2.Value.Year,dateTimePicker2.Value.Month,dateTimePicker2.Value.Day,0,0,0);DataTable条目=QueryEventEntries(开始,停止);更新结果(条目);}privateDataTableQueryEventEntries(DateTimestart,DateTimestop){DataTableentries=newDataTable();entries.Columns.AddRange(newDataColumn[]{newDataColumn("event_type",typeof(Int32)),newDataColumn("event_time",typeof(DateTime)),newDataColumn("event_detail",typeof(String))});使用(SqlConnectionconn=newSqlConnection(DSN)){使用(SqlDataAdapteradapter=newSqlDataAdapter("SELECTevent_type,event_time,event_detailFROMevent_log"+"WHEREevent_time>=@startANDevent_time<=@stop",conn)){adapter.SelectCommand.Parameters.AddRange(newObject[]{newSqlParameter("@start",start),newSqlParameter("@stop",stop)});adapter.Fill(entries);}}returnentries;}UPDATE我想总结并提供一些额外的信息,自从我最初发布这个问题以来,我从这里的讨论和调试工作中学到了我我正在重构从数据库中检索记录的遗留代码,将这些记录收集到数组中,然后遍历数组以逐行填充DataGridView。线程最初是为了在不必要的循环期间补偿并保持UI响应.我的线程/调用已被剥离;现在一切都发生在同一个执行线程上(感谢Sam)。我试图用DataTable替换缓慢、笨拙的方法,我可以用DataAdapter填充它,并传递它的DataSource分配给DataGridView的属性(更新上面的代码)。我遍历了条目DataTable的行以验证该表是否包含预期数据,然后将其指定为DataGridView的数据源。foreach(DataRowrowinentries.Rows){System.Diagnostics.Trace.WriteLine(String.Format("{0}{1}{2}",row[0],row[1],row[2]));DataGridView的一列是自定义DataGridViewColumn,用于设置event_type值的样式。很抱歉我没有在原帖的前面提到这一点,但我不知道这对我的问题很重要。我已将此列暂时转换为标准的DataGridViewTextBoxColumn控件,并且不再出现异常。DataTable中的字段附加到DataGridView的设计视图中预先指定的字段列表。记录的值正在这些附加字段中填充。当运行时尝试呈现单元格时,会提供一个空值(因为应该呈现的值完成几列)。鉴于此,我重新命名并重新标记问题。如果有其他经历过此问题的人可以指导我如何将DataTable绑定到DataGridView的现有列定义,我将不胜感激。您需要确保将每列的DataPropertyName属性设置为DataColumn的ColumnName的适当名称。您可能还需要将DataGridView的AutoGenerateColumns属性设置为false。我在这里找到了解决方案。如果UpdateResults内部发生错误,则听起来dataGridView为空。以上就是C#学习教程:C#绑定DataTable到已有的DataGridView列定义分享所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——privatevoidUpdateResults(DataTableentries){dataGridView.DataSource=entries;//何时设置dataGridView?}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: