2012-08-02 151 views
0

我遇到了一些問題,當用戶在組合框中選擇所選名稱時,與所選名稱鏈接的數據將顯示在列表框中。我有問題製作成這種方法。錯誤在這裏。從組合框中選擇數據並在列表框中顯示信息c#

int selectLocStation = Convert.ToInt32(cbLocStation.SelectedValue); 

錯誤:無法投型的對象 '<> f_AnonymousType2'2 [System.String.System.Int32]' 爲類型 'System.IConvertible'。

private void cbLocStation_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     using (satsEntities Setupctx = new satsEntities()) 
     { 
      int selectLocStation = Convert.ToInt32(cbLocStation.SelectedValue); 

      var query = (from db in Setupctx.requiredtimings 
         join timing t in Setupctx.timings on db.RequiredTimingID equals t.TimingID 
         where db.RequiredLocationStationID == selectLocStation 
         select new 
         { 
          t.Time2 
         }).ToList(); 

      List<TimeSpan> lstSelectedTime = new List<TimeSpan>(); 

      foreach (var a in query) 
      { 
       lstSelectedTime.Add((TimeSpan)a.Time2); 
      } 

      lstTime.DataSource = lstSelectedTime; 
     } 
    } 

這是我在存儲數據到組合框中。

using (satsEntities Setupctx = new satsEntities()) 
     { 
      var DeleteRT = (from DelRT in Setupctx.requiredtimings 
          join locationstationname ls in Setupctx.locationstationnames on DelRT.RequiredLocationStationID equals ls.locationstationID 
          select new { ls.locStatname, DelRT.RequiredLocationStationID }).Distinct().ToList(); 

      cbLocStation.DataSource = DeleteRT.ToList(); 
      cbLocStation.DisplayMember = "locStatname"; 
      cbLocStation.ValueMember = "RequiredLocationStationID"; 

任何幫助將不勝感激。

+0

你如何初始化你的組合框?你能告訴我們你的組合框包含什麼值? – 2012-08-02 06:42:26

+0

讓我告訴你我在組合框中存儲數據的代碼。 – rookie 2012-08-02 06:45:28

回答

1
private void Edit_TS_Load(object sender, EventArgs e) 
    { 
     using (satsEntities Setupctx = new satsEntities()) 
     { 
      var DeleteRT = (from DelRT in Setupctx.requiredtimings 
          join locationstationname ls in Setupctx.locationstationnames on DelRT.RequiredLocationStationID equals ls.locationstationID 
          select new {ls.locStatname, DelRT.RequiredLocationStationID}).Distinct().ToList(); 

      cbLocStation.DataSource = DeleteRT.ToList(); 
      cbLocStation.DisplayMember = "locStatname"; 
      cbLocStation.ValueMember = "RequiredLocationStationID"; 

     } 
    } 

答案定義就在這裏!

0

如果字符串可我想嘗試這個

int selectLocStation = Convert.ToInt32(cbLocStation.SelectedValue.ToString()); 

或本

int selectLocStation =Int32.Parse(cbLocStation.SelectedValue.ToString()); 

你也可以試試這個

DataRowView drow = (DataRowView)cbLocStation.SelectedItem; 
string str = drow.Row.ItemArray[0].ToString(); 

檢查,如果字符串具有數字和將其轉換以int

您還可以添加數據綁定

BindingContext oBC = new BindingContext(); 
    cbLocStation.BindingContext = oBC; 
    cbLocStation.DataBindings.Add(new Binding("SelectedValue", DeleteRT, "RequiredLocationStationID", false, DataSourceUpdateMode.OnPropertyChanged)); 
+0

我試過你的方式,他們提示我另一個錯誤,說「輸入字符串不是正確的格式」。 – rookie 2012-08-02 06:22:43

+0

@rookie ohhh嘗試檢查字符串是否實際包含一個數字,否則使用int解析 – 2012-08-02 06:24:08

+0

儘管如此仍然會提示錯誤。 – rookie 2012-08-02 06:28:55

0

你試圖匿名類型從查詢到時間跨度,因爲它沒有實現IConvertible這是不可能的轉換。您可以編寫包裝類並在查詢中選擇該類。

var query = (from db in Setupctx.requiredtimings 
         join timing t in Setupctx.timings on db.RequiredTimingID equals t.TimingID 
         where db.RequiredLocationStationID == selectLocStation 
         select new WrapperClass 
         { 
          Time = t.Time2 
         }).ToList(); 

public class WrapperClass 
     { 
      public DateTime Time { get; set; } 
     } 

,時間是一個DateTime你在包裝類

+0

寫什麼WrapperClass?介紹一些例子?謝謝! – rookie 2012-08-02 06:26:30

+0

選擇新的返回一個匿名類型,你不能做的操作,如你正在嘗試完成的。而是根據您的需要,您應該編寫一個從查詢返回的類。那麼你可以使用輸出。 – 2012-08-02 06:29:57

+0

我無法使用DateTime,因爲我使用的是TimeSpan,如果我將DateTime更改爲TimeSpan,仍然會提示錯誤。 – rookie 2012-08-02 06:50:33

相關問題