0

したがって、プロセスのステップを含むListViewがあります。左側には、それがどのステップであるかを示すラベルがあり、右側には、説明が記載されたテキストボックスがあります。次に、そのTextBoxの右側に通常の編集ボタンと削除ボタンがありますが、上矢印と下矢印もあります。クリックした場合、現在のアイテムのセットをそのスロットに移動したいと思います。

このListViewはLinqDataSourceによってバインドされており、ボタンがクリックされたセットからアイテムのプロパティにアクセスできれば、ListView.DataBind()を呼び出すだけで、それ自体が並べ替えられます。

私が話しているプロパティは、それがどのステップであるかを示すラベルにあるものです。私はそれをこのように設定しました:

<asp:Label ID="lblStepNumber" runat="server" Text='<%# Eval( "StepNumber", "Step #{0}" ) %>' />

だから私が

ListView.Items.[Where_btn_clicked].StepNumber++;
ListView.Items.[Where_btn_clicked+1].StepNumber--;
ListView.DataBind();

それが最も簡単ですが、このプロパティにアクセスする方法がわかりません。

4

1 に答える 1

2

この場合、私は個人的にリピーターを使用し、それをLinqDataSourceにバインドします。

次に、OnItemDataBoundイベントを処理し、各行のe.Item.DataItemオブジェクトを取得できます。を使用して上ボタンと下ボタンへの参照を取得し、ボタンe.Item.FindControl("btnUP") as Buttonのコマンド引数をDataItemのシーケンス番号に設定します。

次に、ボタンのOnClickイベントで、CommandArgumentを使用してLinqDataSourceを並べ替えて更新します。次に、リピーターを再バインドして変更を表示します。

編集-さらに明確にする

List<Employee>データソースとしてがあり、Employeeオブジェクトが次のように定義されているとします。

public class Employee
{
    int EmployeeID;
    int PlaceInLine; // value indicating the sequence position
    string Name;
}

上ボタンと下ボタンは、ListViewで次のように定義できます。

    <asp:Button ID="btnUpButton" runat="server" 
CommandArgument='<%#Eval("EmployeeID") %>' OnClick="btnUp_Click" />

ボタンがクリックされると、イベントを処理できます。これは、従業員のリストにプライベート変数としてアクセスできることを前提としています。

private List<Employee> _Employees;

protected void btnUp_Click(object sender, EventArgs e)
{
    Button btnUp = sender as Button;
    int employeeID = int.Parse(btnUp.CommandArgument); // get the bound PK
    Employee toMoveUp = _Employees.Where(e=>e.EmployeeID == employeeID).FirstOrDefault();
    // assuming PlaceInLine is unique among all employees...
    Employee toMoveDown = _Employees.Where(e=>e.PlaceInLine == toMoveUp.PlaceInLine + 1).FirstOrDefault();

    // at this point you need to ++ the employees sequence and
    // -- the employee ahead of him  (e.g. move 5 to 6 and 6 to 5)

    toMoveUp.PlaceInLine ++;
    toMoveDown.PlaceInLine --;

    // save the list 
    DataAccessLayer.Save(_Employees);
    //rebind the listivew
    myListView.DataBind();

}
于 2010-01-22T22:08:31.020 に答える