![](/img/trans.png)
[英]ComboBox SelectedItem shows System.Data.DataRowView
[英]System.Data.DataRowView shows in winforms combobox instead of actual data
加載組合框后,它將顯示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;
}
不知道這是否引起您的問題,但是您不必使用cmd.ExecuteNonQuery();
在您填表之前。 只是:
DataTable dt = new DataTable();
using(SqlCommand cmd = new SqlCommand("schemaExec.SelTimeframeCode", _sqlConn))
{
cmd.CommandType = CommandType.StoredProcedure;
using(var da = new SqlDataAdapter(cmd))
da.Fill(dt);
}
cbTimeframe.DisplayMember = "TimeframeDesc";
cbTimeframe.ValueMember = "TimeframeCode";
cbTimeframe.DataSource = dt;
在Visual Studio的斷點處,使用放大鏡打開數據表的調試查看器。 或者表中的foreach DataColumn
將列名追加到StringBuilder
。
這不是您的情況,但是如果數據源是在DisplayMember
, ValueMember
屬性之前設置的,則有時在還原訂單時會發生這種情況。 或者沒有從以前的數據源中清除。
cbTimeframe.DataSource = dt;
cbTimeframe.DisplayMember = "TimeframeDesc";
cbTimeframe.ValueMember = "TimeframeCode";
要么
cbTimeframe.DataSource = ds1;
cbTimeframe.DisplayMember = "fn1";
cbTimeframe.ValueMember = "fn1";
cbTimeframe.DataSource = ds2; -> here you will get the problem (in the Event of index changed) if u didn't clean the DataSource used .
cbTimeframe.DisplayMember = "fn2";
cbTimeframe.ValueMember = "fn2";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.