简体   繁体   English

“没有行可以添加到没有列的DataGridView控件中。 将行添加到DataTable时,必须先添加列。

[英]“No row can be added to a DataGridView control that does not have columns. Columns must be added first.” when adding rows to DataTable

I'm getting the following message when trying to add rows to a DataTable: “No row can be added to a DataGridView control that does not have columns. 尝试将行添加到DataTable时收到以下消息:“没有行可以添加到没有列的DataGridView控件中。 Columns must be added first.” Interestingly enough, the DataTable that I'm trying to add the row to does have three columns at the point when the row is being added. 有趣的是,我要添加行的DataTable在添加行时确实有三列。 It seems like the failure is occurring on the currency manager, way down in the row-insertion stack. 似乎故障发生在货币管理器上,在行插入堆栈中逐渐减少。 Here's my code: 这是我的代码:

    Using DT As DataTable = Me.Tables(TableNamePrefix & " " & CStr(Index + 1))
        DT.Rows.Clear()
        DT.Columns.Clear()

        For Each LF As cLoadField In LFs
            LF.UseDefaultUnits(DispOpt.Units, DispOpt.Format)
            DT.Columns.Add(LF.Name(Cond)).Caption = LF.Name(Cond)
            If Not LF.UnitString(DispOpt) = "" Then
                DT.Columns(LF.Name(Cond)).Caption = LF.Name(Cond) & vbCrLf & LF.UnitString(DispOpt)
            End If
            If LF.FieldType = hecLoadFields.hecLF_LengthPaidOut Then LPO_Name = LF.Name(Cond)
        Next

        For Each HW As CHawser In Hawsers
            If Not Cond.Loads.NameExists(HW.Name) Then Continue For

            DR = DT.NewRow
            For Each LF As cLoadField In LFs
                LF.TankName = HW.Name
                DR(LF.Name(Cond)) = LF.Value(Cond)
            Next
            DT.Rows.Add(DR)
        Next
    End Using

And here's the call stack: 这是调用堆栈:

System.Windows.Forms.dll!System.Windows.Forms.DataGridViewRowCollection.InsertInternal(int rowIndex, System.Windows.Forms.DataGridViewRow dataGridViewRow, bool force) + 0x342 bytes    
System.Windows.Forms.dll!System.Windows.Forms.DataGridView.DataGridViewDataConnection.ProcessListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x5ed bytes    
System.Windows.Forms.dll!System.Windows.Forms.DataGridView.DataGridViewDataConnection.currencyManager_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e) + 0x2b bytes 
System.Windows.Forms.dll!System.Windows.Forms.CurrencyManager.OnListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x15 bytes  
System.Windows.Forms.dll!System.Windows.Forms.CurrencyManager.List_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e) + 0x53e bytes   
System.Data.dll!System.Data.DataView.OnListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x136 bytes  
System.Data.dll!System.Data.DataView.IndexListChanged(object sender, System.ComponentModel.ListChangedEventArgs e) + 0x1c bytes 
System.Data.dll!System.Data.DataView.IndexListChangedInternal(System.ComponentModel.ListChangedEventArgs e) + 0x47 bytes    
System.Data.dll!System.Data.DataViewListener.IndexListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x3b bytes    
System.Data.dll!System.Data.Index.OnListChanged.AnonymousMethod__2(System.Data.DataViewListener listener, System.ComponentModel.ListChangedEventArgs args, bool arg2, bool arg3) + 0x7 bytes    
System.Data.dll!System.Data.Listeners<System.__Canon>.Notify<System.__Canon,bool,bool>(System.__Canon arg1, bool arg2, bool arg3, System.Data.Listeners<System.__Canon>.Action<System.__Canon,System.__Canon,bool,bool> action) + 0x90 bytes    
System.Data.dll!System.Data.Index.OnListChanged(System.ComponentModel.ListChangedEventArgs e) + 0xa4 bytes  
System.Data.dll!System.Data.Index.OnListChanged(System.ComponentModel.ListChangedType changedType, int index) + 0x38 bytes  
System.Data.dll!System.Data.Index.InsertRecord(int record, bool fireEvent) + 0xdf bytes 
System.Data.dll!System.Data.Index.ApplyChangeAction(int record, int action, int changeRecord) + 0x34 bytes  
System.Data.dll!System.Data.Index.RecordStateChanged(int record, System.Data.DataViewRowState oldState, System.Data.DataViewRowState newState) + 0x40 bytes 
System.Data.dll!System.Data.DataTable.RecordStateChanged(int record1, System.Data.DataViewRowState oldState1, System.Data.DataViewRowState newState1, int record2, System.Data.DataViewRowState oldState2, System.Data.DataViewRowState newState2) + 0xaf bytes 
System.Data.dll!System.Data.DataTable.SetNewRecordWorker(System.Data.DataRow row, int proposedRecord, System.Data.DataRowAction action, bool isInMerge, bool suppressEnsurePropertyChanged, int position, bool fireEvent, out System.Exception deferredException) + 0x540 bytes 
System.Data.dll!System.Data.DataTable.InsertRow(System.Data.DataRow row, long proposedID, int pos, bool fireEvent) + 0xf5 bytes 
System.Data.dll!System.Data.DataRowCollection.Add(System.Data.DataRow row) + 0x1a bytes 

Any help would be greatly appreciated! 任何帮助将不胜感激!

This DataTable is the DataSource of a DataGridView that lives on my application's main form. 该DataTable是DataGridView的数据源,它位于应用程序的主窗体中。 It turns out that I didn't set the AutoGenerateColumns property of the DataGridView, which was the source of this error. 事实证明,我没有设置DataGridView的AutoGenerateColumns属性,这是此错误的根源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 “没有行不能添加到没有列的 DataGridView 控件。必须先添加列。” 在 VB.net - "No row can be added to a DataGridView control that does not have columns. Columns must be added first." in VB.net 没有行可以添加到没有列的 DataGridView 控件。 必须先添加列。 在 VB.net - No row can be added to a DataGridView control that does not have columns. Columns must be added first. in VB.net 使用手动添加的列进行Datagridview排序 - Datagridview Sorting with manually added columns 当有更多列添加到DataGridView时无法刷新TabControl页面上的DataGridView - Can't Refresh DataGridView on TabControl Page When There are More Columns Added to DataGridView 按行添加数据时格式化 DataTable 列 - Formatting DataTable columns when adding data by rows 将列添加到DataGridView中最后一列的DataTable Cuts - Adding Columns to DataTable Cuts of Last Column in DataGridView 如何避免在VB.NET中为自定义派生的DataGridView控件添加两次列? - How do I avoid columns being added twice for a custom derived DataGridView control in VB.NET? 当控件绑定数据时,不能以编程方式将行添加到DataGridView的行集合中 - The Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound 绑定时DataGridView无法从DataTable获取列 - DataGridView not getting columns from DataTable when binding 在将控件添加到表单之前,设置添加的datagridview的列可见性(属性) - Set column visibility (properties) of added datagridview prior to adding the control to the form
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM