2012-03-22 81 views
0

你不會這麼想,但是當列表框綁定到數據源時(就我所見),它會執行此操作。應該更改列表框的父級更改選定的索引?

我已經將行爲簡化爲下面的代碼。 「if」行在通過數據綁定加載列表和手動加載列表(兩者使用相同的數據表)之間切換。在每種情況下,我隨後設置選定的索引,然後更改父表單。通過手動加載,選定的索引被保留,綁定將丟失。我看不出這有什麼意義 - 我不明白爲什麼更改主機表單應該改變列表的任何屬性。這是一個錯誤?

Public Class Form1 
    Sub main() Handles Me.Load 
     Dim ListControl1 As ListBox = New ListBox 
     ListControl1.Parent = Me 
     Dim dt = New DataTable 
     dt.Columns.Add("intColourID") 
     dt.Columns.Add("strName") 
     dt.Rows.Add({1, "Red"}) 
     dt.Rows.Add({2, "Green"}) 
     dt.Rows.Add({3, "Blue"}) 

     ListControl1.ValueMember = dt.Columns(0).ColumnName 
     ListControl1.DisplayMember = dt.Columns(1).ColumnName 
     If False Then 
      ListControl1.DataSource = dt 
     Else 
      For i = 0 To dt.Rows.Count - 1 
       ListControl1.Items.Add(dt.Rows(i)("strName").ToString) 
      Next 
     End If 
     ListControl1.SelectedIndex = 2 
     Dim z As Form = New Form 
     ListControl1.Parent = z 
     z.Show() 
    End Sub 
End Class 
+0

您是否爲Microsoft工作?他們認爲他們知道我想做什麼或應該做得比我做得更好。 – DJDave 2012-03-22 13:42:57

+0

我可以重新構造問題,以便不需要更改父項。註釋掉第一個.parent =行,最後三行(以表格的形式等等)。爲什麼數據綁定列表在選定索引設置且手動索引不存在時拋出錯誤? – DJDave 2012-03-22 13:57:14

+0

可能是沒有意義的,但改變父母是否有意義? (替換並糾正我以前的評論) – 2012-03-22 20:55:28

回答

0

添加控件到窗體的正確的方法是不是要設置其母公司,而是將其添加到收藏Controls形式。如果我這樣做,我不會得到一個例外(當您在評論中寫下時,最後三行註釋掉了)。

Me.Controls.Add(ListControl1) ' Instead of ListControl1.Parent = Me 
+0

感謝您的建議。我認爲這兩個陳述是相同的,但這只是一個假設。儘管如此,如果您註釋掉第一個.parent =行(不是用me.controls.add替換它),但在設置databound列表的selectedindex時仍然存在錯誤,但不會顯示「manual 「列表。爲什麼列表必須是表單的Controls集合的成員才能使selectedindex適用於數據綁定列表,但不適用於手動填充列表? – DJDave 2012-03-23 10:23:32

+0

在調試器中,我看到ListBox的'Items'集合沒有被填充,當使用一個ListBox沒有附加到表單的數據綁定列表時。我不知道爲什麼;這只是它實施的方式。世界並不完美。 – 2012-03-23 14:12:07

+0

謝謝您確認。欣賞你的時間。現在我知道Listbox在這些情況下做了什麼並且不會做什麼,我會相應地進行編碼。 – DJDave 2012-03-28 11:23:59