我有一个对象列表,它被数据绑定到gridview。 gridview有一个删除按钮附加到行。
我需要通过点击保持对象列表(就像离线工作一样) 我不希望使用会话或cookie或查看状态
目前的行为: 列表有4个项目=>删除1项=>列表有3个项目=>删除1项(POSTBACK)列表将重新生成4个项目,然后删除1。
class Emails
{
public string Email { get; set; }
public Emails(string _Address)
{
Email = _Address;
}
}
if (!IsPostBack)
{
ListOfEmails = new List<Emails>();
ListOfEmails.Add(new Emails("1@a.com"));
ListOfEmails.Add(new Emails("2@a.com"));
ListOfEmails.Add(new Emails("3@a.com"));
ListOfEmails.Add(new Emails("4@a.com"));
GridView1.DataSource = ListOfEmails;
GridView1.DataBind();
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string EmailToBeDeleted = GridView1.Rows[e.RowIndex].Cells[0].Text;
ListOfEmails.Remove(ListOfEmails.Find(L => L.Email == EmailToBeDeleted));
GridView1.DataSource = null;
GridView1.DataSource = ListOfEmails;
GridView1.DataBind();
}
ASPX:
<asp:BoundField DataField="Email" HeaderText="Email Address" />
<asp:ButtonField ButtonType="Button" CommandName="Delete" HeaderText="Action2"
ShowHeader="True" Text="Delete" />
<asp:CommandField ButtonType="Image" DeleteImageUrl="~/delete.gif"
ShowDeleteButton="True" />
“我目前有2个删除按钮”
答案 0 :(得分:0)
网页是无国籍的。如果重新加载页面,则会重新创建所有控件和数据。这就是为什么我们使用Viewstates和Session变量之类的东西来保存post / gets之间的数据。使用缓存和更新面板等其他技术只会隐藏您正在使用视图状态的事实。我能想到的唯一选择是读取/写入某些数据源(数据库或平面文件,如XML),但这比使用视图状态或会话更加开销。也许如果你解释你想要避免这些选择的理由,我们可以提出一个解决方案吗?