CodeGo.net>如何手动添加项目到Repeater控件

首先:

> _ddlOptions是下拉列表
> _selectedOptions是转发器控件

这只是我最终控制权的临时代码.

我想要做的是在!IsPostBack上获取_ddlOption的数据.有添加按钮,使用户可以将选定的下拉项移动到中继器控件.

它通过以下方式更新Repeater.Items正确吗?我发现了许多使用DataSource手动添加/删除元素的解决方案,但是这里的DataSource为null,因为我仅在!IsPostBack上进行了设置.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            _ddlOptions.DataSource = new[] { 1, 2, 3 };
            _ddlOptions.DataBind();
        }
    }

    protected void OnAdd(object sender, EventArgs e)
    {
        var list = new ArrayList(_selectedOptions.Items);
        list.Add(_ddlOptions.SelectedItem);
        _ddlOptions.Items.RemoveAt(_ddlOptions.SelectedIndex);
        _selectedOptions.DataSource = list;
        _selectedOptions.DataBind();
    }

解决方法:

如果您只需要获取一次数据,并且要使用viewstate,请在第一次需要时获取数据,将其存储在VS中,然后从VS中获取所有以后的PostBacks.

例:

public List<int> Data
    {
        get
        {
            if (ViewState["Data"] == null)
            {
                // Get your data, save it and return it.
                var data = new List<int> { 1, 2, 3 };
                ViewState["Data"] = data;
                return data;
            }
                return (List<int>)ViewState["Data"];
        }
        set
        {
            ViewState["Data"] = value;
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        { 
            BindData(Data); 
        }
    }

    private void BindData(List<int> data)
    {
        _ddlOptions.DataSource = data;
        _ddlOptions.DataBind();
    }

    protected void OnAdd(object sender, EventArgs e)
    {
        var existing = Data;

        existing.Add(_ddlOptions.SelectedItem);                        
        _ddlOptions.Items.RemoveAt(_ddlOptions.SelectedIndex);

        Data = existing;
        BindData(existing);
    }

我没有测试过-这只是我的第一个想法,但您可以在此基础上进行测试.

帕特里克

上一篇:Hangfire


下一篇:Object 类 Json 序列化 首字母ASCII排序