【发布时间】:2015-03-27 14:57:48
【问题描述】:
加载组合框后,它会显示 System.Data.DataRowView 而不是数据。我正在使用从存储过程(TimeframeDesc 和 TimeframeCode)返回的正确列名。
我在调试时收到消息“无法绑定到新的显示成员”。
private bool loadTimeframeList(out string msg)
{
msg = "";
string spName = "schemaExec.SelTimeframeCode";
bool result = true;
SqlCommand cmd = new SqlCommand(spName);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = _sqlConn;
try
{
SqlDataAdapter rdr = new SqlDataAdapter(cmd);
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
rdr.Fill(dt);
cbTimeframe.DisplayMember = "TimeframeDesc";
cbTimeframe.ValueMember = "TimeframeCode";
cbTimeframe.DataSource = dt;
}
catch (Exception ex)
{
result = false;
msg = "Could not load Timeframe Codes" + Environment.NewLine + ex.Message;
}
return result;
}
【问题讨论】:
-
在
rdr.Fill(dt)之后设置断点并仔细检查列名。确保没有前导或尾随空格。 -
你能告诉我具体如何检查列名吗?我不知道我在找什么。谢谢
-
在断点处,在 Visual Studio 中,使用放大镜打开数据表的调试查看器。或 foreach
DataColumnin table 将列名附加到StringBuilder。 -
@Loathing 请作为答案发布,以便我标记它。我按照您的建议使用了放大镜 - 显然在存储过程中有调试“SELECT @whatever”语句,这些结果被返回到 DataTable 而不是实际数据。
-
好东西,已发布答案。