0

現在、ListBox1 に 12 個の静的な値 (value1、value2、value3 など) を持つ 2 つの ListBox (ListBox1 と ListBox2) があり、ユーザーは追加ボタンと削除ボタンを使用してそれらの間で値を転送できます。ドロップダウンボックスもあります。ドロップダウン ボックスで特定の選択が行われたときに ListBox2 に最大値を適用するにはどうすればよいですか? つまり、ドロップダウン ボックスで値が選択されたときに、最大 1 つのエントリを Listbox1 から Listbox2 に移動できるようにしたい場合です。

 protected void MoveRight(object sender, EventArgs e)
{
    while (ListBox1.Items.Count > 0 && ListBox1.SelectedItem != null)
    {
        ListItem selectedItem = ListBox1.SelectedItem;
        selectedItem.Selected = false;
        ListBox2.Items.Add(selectedItem);
        ListBox1.Items.Remove(selectedItem);
    }
}
protected void MoveLeft(object sender, EventArgs e)
{
    while (ListBox2.Items.Count > 0 && ListBox2.SelectedItem != null)
    {
        ListItem selectedItem = ListBox2.SelectedItem;
        selectedItem.Selected = false;
        ListBox1.Items.Add(selectedItem);
        ListBox2.Items.Remove(selectedItem);
    }
}
private void BindData()
{
    ListBox1.Items.Add(new ListItem("01", "01"));
    ListBox1.Items.Add(new ListItem("02", "02"));
    ListBox1.Items.Add(new ListItem("03", "03"));
    ListBox1.Items.Add(new ListItem("04", "04"));
    ListBox1.Items.Add(new ListItem("05", "05"));
    ListBox1.Items.Add(new ListItem("06", "06"));
    ListBox1.Items.Add(new ListItem("07", "07"));
    ListBox1.Items.Add(new ListItem("08", "08"));
    ListBox1.Items.Add(new ListItem("09", "09"));
    ListBox1.Items.Add(new ListItem("10", "10"));
    ListBox1.Items.Add(new ListItem("11", "11"));
    ListBox1.Items.Add(new ListItem("12", "12"));

}
4

3 に答える 3

0

最大数とリスト内の項目数の小さい方を反復する for ループを使用します。

protected void MoveRight(object sender, EventArgs e)
{
    int max = 1;
    int iterations = ListBox1.Items.Count < max ? ListBox1.Items.Count : max
    for(int i = 0; i < iterations; i++)
    {
        ListItem selectedItem = ListBox1.SelectedItem;
        if(selectedItem == null)
            break;

        selectedItem.Selected = false;
        ListBox2.Items.Add(selectedItem);
        ListBox1.Items.Remove(selectedItem);
    }
}

これで、クラス定義に移動maxして、必要に応じて操作できます。

于 2013-03-25T16:40:50.420 に答える
0

コード ビハインドでどのように処理しますか? ドロップダウン リストが 1 に設定されているときに最大 1 つの選択されたアイテムがコピーされるようにしたい場合は、次のようにすることができます。

protected void MoveRight(object sender, EventArgs e)
{
    int max = Convert.ToInt32(DropDownList1.SelectedValue);
    for(int i=0;i<max && ListBox1.Items.Count > 0 && ListBox1.SelectedItem != null; i++)
    {
        ListItem selectedItem = ListBox1.SelectedItem;
        selectedItem.Selected = false;
        ListBox2.Items.Add(selectedItem);
        ListBox1.Items.Remove(selectedItem);
   }

}

ListBox1または、ドロップダウン リストが 1 に設定されているときにで 2 つのアイテムが選択されている状況を検証エラーにしたい場合は、次のServerValidateイベントのハンドラーを記述できCustomValidatorます。

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs e)
{
    // There's probably a simpler way to get a count of items selected
    e.IsValid = ListBox1.Items.Count(li=> li.Selected) <= Convert.ToInt32(DropDownList1.SelectedValue);
}

または、クライアント側でそれを実現したい場合は、javascript を記述する必要があります。

于 2013-03-26T02:08:55.213 に答える
0

このコードで試すことができます

int YourMax = 10;
if(ListBox1.Items.Count < Yourmax)
{
   //Add item
       }

リンク : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.listbox.objectcollection_members(v=vs.80).aspx

注:このニーズに対応するプロパティがありません

すべてのプロパティはこちら: http://msdn.microsoft.com/fr-fr/library/aeb9t2b5(v=vs.80).aspx

于 2013-03-25T16:40:30.850 に答える