2010-08-24 67 views
1

我有一個List<ColumnList> ColumnListLists,它有一個綁定源(bsLists)附加到它。 ColumnList在裏面有一個List<Column>。我有一個綁定源綁定到當前的bsLists指向該內部列表。排序數據綁定對象中的列表的問題

困惑了嗎?這裏有一些可能有用的代碼。

public class ColumnList 
{ 
    ... 
    public string Name { get; set;} 
    public List<Column> ListOfColumns { get; set;} 
} 

public class Column 
{ 
    ... 
    public string HeaderName { get; set; } 
} 

public class CustContractsSetup 
{ 
    public CustContractsSetup() 
    { 
     InitializeComponent(); 
     bsLists = new BindingSource(Properties.Settings.Default.ColumnListLists, null); 
     cmbListName.DataSource = bsLists; 
     cmbListName.DisplayMember = "Name"; 
     bsColumns = new BindingSource(bsLists, "ListOfColumns"); 
     lbCurrent.DataSource = bsColumns; 
     lbCurrent.DisplayMember = "HeaderName"; 
    } 
    BindingSource bsLists; 
    BindingSource bsColumns; 
    ListBox lbCurrent; 
} 

現在我想要做的是改變兩個Column的順序。

private void btnUp_Click(object sender, EventArgs e) 
{ 
    if (lbCurrent.SelectedIndex <= 0 || lbCurrent.SelectedIndex > bsColumns.Count) 
     return; 
    System.Diagnostics.Debug.Print("before:"); 
    Debug.Print(((ColumnList)bsLists.Current).ListOfColumns[lbCurrent.SelectedIndex - 2].HeaderName); 
    Debug.Print(((ColumnList)bsLists.Current).ListOfColumns[lbCurrent.SelectedIndex - 1].HeaderName); 
    Debug.Print(((ColumnList)bsLists.Current).ListOfColumns[lbCurrent.SelectedIndex].HeaderName); 
    Debug.Print(((ColumnList)bsLists.Current).ListOfColumns[lbCurrent.SelectedIndex + 1].HeaderName); 
    Debug.Print(((ColumnList)bsLists.Current).ListOfColumns[lbCurrent.SelectedIndex + 2].HeaderName); 
    ((ColumnList)bsLists.Current).ListOfColumns.Reverse(lbCurrent.SelectedIndex - 1, 1); 
    Debug.Print("after:"); 
    Debug.Print(((ColumnList)bsLists.Current).ListOfColumns[lbCurrent.SelectedIndex - 2].HeaderName); 
    Debug.Print(((ColumnList)bsLists.Current).ListOfColumns[lbCurrent.SelectedIndex - 1].HeaderName); 
    Debug.Print(((ColumnList)bsLists.Current).ListOfColumns[lbCurrent.SelectedIndex].HeaderName); 
    Debug.Print(((ColumnList)bsLists.Current).ListOfColumns[lbCurrent.SelectedIndex + 1].HeaderName); 
    Debug.Print(((ColumnList)bsLists.Current).ListOfColumns[lbCurrent.SelectedIndex + 2].HeaderName); 
    bsLists.ResetCurrentItem(); 
} 

這是輸出我得到

before: 
Conversion Level 
Conversion Programmer 
Edge Required 
Education Required 
Target Month 
after: 
Conversion Level 
Conversion Programmer 
Edge Required 
Education Required 
Target Month 

如果事情的來龍去脈,他們應該邊緣所需應轉換程序員已經交換。但正如你所看到的,前後列表完全一樣。

我犯了什麼樣的錯誤,是讓我的列表不會改變順序?

回答

1

我認爲你的基本問題是倒車檔的大小,請嘗試:

.Reverse(lbCurrent.SelectedIndex - 1, 2); 
+0

我知道這是某種愚蠢的錯誤。 – 2010-08-24 20:27:17