我正在填充一个包含数据集的组合框:
ComboName.Items.Clear()
DS = New DataSet
DS.Tables.Add(New DataTable("DEMAND"))
DA = New SqlDataAdapter("select * from DEMAND", CON)
DA.Fill(DS, "DEMAND")
ComboName.DataSource = DS.Tables(0)
ComboName.DisplayMember = "name"
ComboName.ValueMember = "id"
现在我想借助ValueMember
:
Private Sub ComboName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboName.SelectedIndexChanged
Dim I as Integer = CType(ComboName.SelectedValue.ToString(), Integer)
CMD = New SqlCommand("select * from DEMAND where id=" & I, CON)
RDR = CMD.ExecuteReader()
If RDR.Read Then
TxtAdrs.Text = RDR!adrs
End If
End Sub
但在这里我收到了一个错误:
从字符串
"System.Data.DataRowView"
到类型'Integer'
的转换无效。
有人可以说出我做错了吗?
答案 0 :(得分:2)
您的ComboName.SelectedValue.ToString()
会返回班级名称
"System.Data.DataRowView"
这是ToString()
的默认行为尝试从DataRowView获取特定列。
SelectedItem是绑定到ComboBox数据源的数据对象,在本例中是DataRowView。
您需要将SelectedItem强制转换为DataRowView,然后从中检索适当的值。
您可以按照以下方式执行此操作:
DataRowView oDataRowView = ComboName.SelectedItem as DataRowView;
string sValue = "";
if (oDataRowView != null) {
sValue = oDataRowView.Row["YourFieldName"] as string;
}
答案 1 :(得分:0)
我猜错误就在这一行
Dim I as Integer = CType(ComboName.SelectedValue.ToString(), Integer)
像这样使用
Dim I as Integer = CType(ComboName.SelectedValue, Integer)
希望这有帮助
答案 2 :(得分:0)
尝试将其声明为对象而不是整数。
dim selecteditem as object
selecteditem = comboname.selectedvalue