我有一个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
如果事情有效,那么Edge Required应该与Conversion Programmer交换。但是你可以看到前后列表完全一样。
我犯了什么样的错误让我的清单无法更改订单?
答案 0 :(得分:1)
我认为您的基本问题是反转范围的大小,请尝试:
.Reverse(lbCurrent.SelectedIndex - 1, 2);