0

私は自分のselectedvalueプロパティを持つ詳細ビュー内にリストボックスを持っています.Appenddatabounditems = "true"を設定すると、リストボックスの値が複製されます。

リストボックスでの重複を避ける方法を教えてください。

私のコードスニペットは次のとおりです。

【ASPXページ】

'<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">'
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
 <asp:ListBox ID="sd" runat="server"></asp:ListBox>
<asp:ScriptManager ID="scriptManager1" runat="server" />
 <asp:DetailsView ID="dvProfile" runat="server" AutoGenerateRows="False" DataSourceID="odsProfileData">
    <Fields>
        <asp:BoundField DataField="FullName" HeaderText="Full Name" HeaderStyle-Width="100px" />
        <asp:TemplateField HeaderText="Products">
            <ItemTemplate>
                <iac:MyMultiSelectionDropDown ID="ListBox1" OnDataBound="Databound" runat="server"
                    DataSourceID="odsProducts" DataTextField="FullName" DataValueField="ID" AppendDataBoundItems="true"
                    SelectionMode="Multiple" SelectedValuesCSV='<%# Bind("Products") %>'>
                </iac:MyMultiSelectionDropDown>
            </ItemTemplate>
            <EditItemTemplate>
                <iac:MyMultiSelectionDropDown ID="ListBox1" OnDataBound="Databound" runat="server"
                    DataSourceID="odsProducts" DataTextField="FullName" DataValueField="ID" AppendDataBoundItems="true"
                    SelectionMode="Multiple" SelectedValuesCSV='<%# Bind("Products") %>'>
                </iac:MyMultiSelectionDropDown>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ButtonType="button" ShowEditButton="true" EditText="Edit User Profile" />
    </Fields>
</asp:DetailsView>
 <asp:ObjectDataSource ID="odsProfileData" runat="server" SelectMethod="GetProfileData"
    TypeName="MultiSelectionTest.App_Code.TestData" />
<asp:ObjectDataSource ID="odsProducts" runat="server" SelectMethod="GetProducts"
    TypeName="MultiSelectionTest.App_Code.TestData" />

[TestData.CS]

//このクラス ファイルを使用して、ListBox を埋めました。

public class TestData
{
    public List<ProfileData> GetProfileData()
    {
        List<ProfileData> ret = new List<ProfileData>();
        ret.Add(new ProfileData("Test1", "1,2"));
        return ret;
    }
    public List<Product> GetProducts()
    {

        List<Product> ret = new List<Product>();
        ret.Add(new Product(1, "Product1"));
        ret.Add(new Product(2, "Product2"));
        ret.Add(new Product(3, "Product3"));
        ret.Add(new Product(4, "Product4"));
        return ret;
    }

    public class ProfileData
    {
        public ProfileData(string fullName, string products)
        {
            FullName = fullName;
            Products = products;
        }
        public string FullName { get; set; }
        public string Products { get; set; }
    }
    public class Product
    {
        public Product(int id, string fullName)
        {
            ID = id;
            FullName = fullName;
        }
        public int ID { get; set; }
        public string FullName { get; set; }
    }

}

[MyMultiselectionDropDown.cs]

//このクラス ファイルを使用して、SelectedValues を取得します。

 public class MyMultiSelectionDropDown : ListBox
{
    private bool _noUpdate = false;

    [PersistenceMode(PersistenceMode.InnerProperty)]
    public string SelectedValuesCSV
    {
        get
        {
            string ret = string.Empty;
            foreach (System.Web.UI.WebControls.ListItem li in this.Items)
            {
                if (li.Selected)
                {
                    ret += "," + li.Value.ToString();
                }
            }
            return ret.TrimStart(',');
        }
        set
        {
            if (!_noUpdate)
            {
                _noUpdate = true;
                this.DataBind();

            }
            _noUpdate = false;

            IdContainer values = new IdContainer(value);
            foreach (string val in values)
            {
                System.Web.UI.WebControls.ListItem li = this.Items.FindByValue(val);
                if (li != null)
                    li.Selected = true;
            }
        }
    }
}

親切にアドバイスしてください。

よろしく、 Sunil Prabakar C

4

1 に答える 1

0

やあ SunilAppendDataBoundItemsデザイナー コードを介してドロップダウン リストのプロパティを定義する場合、同じ ex のような既定のリスト項目を追加する必要があると思います<asp:ListItem Text="(Select a State)" Value="" />

コードを変更しましたので、同じものを使用してください。

<ItemTemplate>
            <iac:MyMultiSelectionDropDown ID="ListBox1" OnDataBound="Databound"  runat="server"
                DataSourceID="odsProducts" DataTextField="FullName" DataValueField="ID"   AppendDataBoundItems="true"
                SelectionMode="Multiple" SelectedValuesCSV='<%# Bind("Products") %>'>
                <iac:ListItem Text="(Please Select)" Value="" />   
             </iac:MyMultiSelectionDropDown>
        </ItemTemplate>

詳細な調査については、リンクを参照してください 参照リンク

それがあなたを助けることを願っています。

于 2013-06-11T07:42:54.557 に答える