首先:
它只是我最终控制的临时代码。
我想要做的是获取_ddlOption的数据!IsPostBack。有一个添加按钮,用户可以将选定的下拉项目移动到转发器控件。
以下更新Repeater.Items的方法是否正确?我发现了许多使用DataSource手动添加/删除元素的解决方案,但是我的DataSource是空的,因为我只设置了它!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();
}
答案 0 :(得分:5)
如果您只需要获取一次数据并且您将要使用viewstate,请在第一次需要时获取数据,将其存储在VS中并从VS获取所有未来的PostBack。
示例:
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);
}
我没有对此进行测试 - 这只是我的第一个想法,但你可以从这里开始构建它。
帕特里克。
答案 1 :(得分:0)
您可以使用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()
答案 2 :(得分:0)
对我来说很好看。您可能只想在onAdd方法之外移动列表的decalration。正如您所拥有的那样,我认为每次点击添加按钮时都会重新初始化,因此您的转发器中的当前所选项目永远不会超过。