У меня есть 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();
}
И это вывод Iget
before:
Conversion Level
Conversion Programmer
Edge Required
Education Required
Target Month
after:
Conversion Level
Conversion Programmer
Edge Required
Education Required
Target Month
Если все работает как надо, Edge Required должен был поменяться с Conversion Programmer.но, как вы можете видеть, список «до» и «после» в точности совпадает.
Какую ошибку я совершаю, не позволяя моему списку изменить порядок?