向现有动态数据表添加新行

时间:2010-09-25 12:42:22

标签: vb.net datatable row add

我有一个从数据库创建的动态数据表。我想添加一个新行(空白),因此可以选择在组合框中选择任何内容。没有添加新行,一切正常。但是当我添加一个新行时,组合框没有显示任何内容。我错过了什么?

这是代码

Dim DT As New DataTable

DT = DS.Tables("CallStatus")
Dim drNewRow As DataRow = DT.NewRow

'Add new row
drNewRow.Item("CampaignCallStatusID") = ""
drNewRow.Item("CampaignCallStatus") = ""
DT.Rows.Add(drNewRow)
DT.AcceptChanges()

'Fill combobox
With cboCallStatus
    .DataSource = DT
    .DisplayMember = "CampaignCallStatus"
    .ValueMember = "CampaignCallStatusID"
End With

3 个答案:

答案 0 :(得分:4)

我找到了解决方案。我使用了InsertAt方法,并将行放在顶部。

 Dim DT As New DataTable
 DT = DS.Tables("CallStatus")
 Dim drNewRow As DataRow = DT.NewRow
 DT.Rows.InsertAt(drNewRow, 0)   ' <== This is the solution
 DT.AcceptChanges()

 With cboCallStatus
    .DataSource = DT
    .DisplayMember = "CampaignCallStatus"
    .ValueMember = "CampaignCallStatusID"
 End With
 cboCallStatus.Refresh()

答案 1 :(得分:0)

在您的示例中,空白行的CampaignCallStatus为空,因此组合框中的显示将为空。如果您认为应在当前显示的记录中显示其中一个数据库值,则将空白行CampaignCallStatus更改为值(例如Debug)以确认正在显示空白行。

组合框中显示空行的原因很可能是因为CampaignCallStatusID与CampaignCallStatusID的数据库类型不同。尝试将空行值从“”更改为0。

答案 2 :(得分:0)

您可以尝试迭代所有需要的行并手动将它们添加到ComboBox 一个例子如下:

ComboBox.Items.Clear()
For Each dr as DataRow in DT.Rows
    ComboBox.Items.Add(dr("col1").ToString())
Next

当数据绑定失败时,这可以保证正常工作。