繁体   English   中英

如何手动将项添加到Repeater控件

[英]How to add item to Repeater control manually

首先:

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

它只是我最终控制的临时代码。

我想要做的是获取_ddlOption的数据!IsPostBack。 有一个添加按钮,用户可以将选定的下拉项目移动到转发器控件。

它通过以下方式更新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获取所有未来的Pos​​tBack。

例:

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);
    }

我没有测试过这个 - 它只是我的第一个想法,但你可以从这里开始。

帕特里克。

您可以使用DataAdapter填充DataSet中的表。

DataSet ds = new DataSet();

using (SqlConnection conn = YourConnectionFactory.GetConnection())  
{  
SqlCommand objComm = DBHelper.CreateStoredProc("YourStoredProcedure",
conn);  
SqlDataAdapter adapt = new SqlDataAdapter(objComm);  
adapt.Fill(ds, TableName);  
conn.Close();  
}  

DataTable dt = ds.Tables[0];  
for (int a=dt.Rows.Count-1; a>= 0; a--)  
{  
// check and insert as necessary  
}  

YourControl.DataSource = ds;  
YourControl.DataBind();  

你也可以这样做,
喜欢重新绑定来自: http//msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.aspx

Dim values As New ArrayList() 
  values.Add(New PositionData("Microsoft", "Msft"))    
 values.Add(New PositionData("Intel", "Intc"))    
values.Add(New PositionData("Dell", "Dell"))   
 Repeater1.DataSource = values Repeater1.DataBind() 
 Repeater2.DataSource = values Repeater2.DataBind() 

在我看来很好。 您可能只想在onAdd方法之外移动列表的decalration。 正如您所拥有的那样,我认为每次单击“添加”按钮时都会重新初始化,因此您的转发器中的当前所选项目永远不会超过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM