У меня есть страница, которая динамически создает gridviews при нажатии кнопки, которая работает нормально. И вместе с этим, создавая сетку, на вершине сетки есть кнопка ссылки, чтобы удалить ее. Теперь то, что я пытаюсь выполнить, заключается в том, что когда я удаляю одну из сеток, она удаляет сетку со страницы и повторно выполняет повторную синхронизацию чисел. Значение, позволяет сказать, что у меня есть следующие:Удаление динамического gridview
Grid1
Grid2
Grid3
Grid4
Если я решил удалить Grid3, что на самом деле это происходит:
Grid1
Grid2
Grid4
И потом, если я нажимаю что-то на странице для того, чтобы перезагрузить или что-то, то это будет правильно пересинхронизироваться номера:
Grid1
Grid2
Grid3
Я понятия не имею, почему его делать это, и почему он не делает это таким образом, в первую очередь. Может кто-нибудь, пожалуйста, помогите мне с этим?
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Page_Init(object sender, EventArgs e)
{
string ctrlname = this.Page.Request.Params.Get("__EVENTTARGET");
if (Session["Tables"] == null)
{
Session.Add("Tables", 1);
DataTable dt = GetTable();
Session.Add(Session["Tables"].ToString(), dt);
GridView gv = new GridView();
gv.ID = "Grid-" + Session["Tables"].ToString();
gv.DataSource = dt;
gv.DataBind();
LinkButton lb = new LinkButton();
lb.ID = "Delete-Grid-" + Session["Tables"].ToString();
lb.Text = "Delete Grid " + Session["Tables"].ToString();
lb.Click += new EventHandler(DeleteGrid);
PlaceHolder1.Controls.Add(lb);
PlaceHolder1.Controls.Add(gv);
}
if (IsPostBack)
{
PlaceHolder1.Controls.Clear();
int next = (int)Session["Tables"];
for (int i = 1; i <= (int)Session["Tables"]; i++)
{
GridView gv = new GridView();
gv.ID = "Grid-" + i.ToString();
gv.DataSource = (DataTable)Session[i];
gv.DataBind();
LinkButton lb = new LinkButton();
lb.ID = "Delete-Grid-" + i.ToString();
lb.Text = "Delete Grid " + i.ToString();
lb.Click += new EventHandler(DeleteGrid);
PlaceHolder1.Controls.Add(lb);
PlaceHolder1.Controls.Add(gv);
}
if (ctrlname == "Button1")
{
next = next + 1;
Session["Tables"] = next;
DataTable dt = GetTable();
Session.Add(Session["Tables"].ToString(), dt);
GridView gv = new GridView();
gv.ID = "Grid-" + next.ToString();
gv.DataSource = (DataTable)Session[next];
gv.DataBind();
LinkButton lb = new LinkButton();
lb.ID = "Delete-Grid-" + next.ToString();
lb.Text = "Delete Grid " + next.ToString();
lb.Click += new EventHandler(DeleteGrid);
PlaceHolder1.Controls.Add(lb);
PlaceHolder1.Controls.Add(gv);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
}
protected void DeleteGrid(object sender, EventArgs e)
{
LinkButton gridLink = (LinkButton)sender;
String gridNum = gridLink.ID.ToString().Split('-').Last();
GridView grid = (GridView)this.Page.FindControl("Grid-" + gridNum);
LinkButton lbd = (LinkButton)this.Page.FindControl("Delete-Grid-" + gridNum);
PlaceHolder1.Controls.Remove(grid);
PlaceHolder1.Controls.Remove(lbd);
int next = (int)Session["Tables"];
next = next - 1;
Session.Add("Tables", next);
Session.Remove(gridNum);
}
public DataTable GetTable()
{
//
// Here we create a DataTable with a few columns.
//
// Create Datatable to store all colums
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("Size", typeof(string)));
dt.Columns.Add(new DataColumn("Description", typeof(string)));
dt.Columns.Add(new DataColumn("Quantity", typeof(string)));
dt.Columns.Add(new DataColumn("Unit", typeof(string)));
dt.Columns.Add(new DataColumn("Duration", typeof(string)));
dt.Columns.Add(new DataColumn("DurationType", typeof(string)));
dt.Columns.Add(new DataColumn("Amount", typeof(string)));
dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["Size"] = string.Empty;
dr["Description"] = string.Empty;
dr["Quantity"] = string.Empty;
dr["Unit"] = string.Empty;
dr["Duration"] = string.Empty;
dr["DurationType"] = string.Empty;
dr["Amount"] = string.Empty;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["RowNumber"] = 2;
dr["Size"] = string.Empty;
dr["Description"] = string.Empty;
dr["Quantity"] = string.Empty;
dr["Unit"] = string.Empty;
dr["Duration"] = string.Empty;
dr["DurationType"] = string.Empty;
dr["Amount"] = string.Empty;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["RowNumber"] = 3;
dr["Size"] = string.Empty;
dr["Description"] = string.Empty;
dr["Quantity"] = string.Empty;
dr["Unit"] = string.Empty;
dr["Duration"] = string.Empty;
dr["DurationType"] = string.Empty;
dr["Amount"] = string.Empty;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["RowNumber"] = 4;
dr["Size"] = string.Empty;
dr["Description"] = string.Empty;
dr["Quantity"] = string.Empty;
dr["Unit"] = string.Empty;
dr["Duration"] = string.Empty;
dr["DurationType"] = string.Empty;
dr["Amount"] = string.Empty;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["RowNumber"] = 5;
dr["Size"] = string.Empty;
dr["Description"] = string.Empty;
dr["Quantity"] = string.Empty;
dr["Unit"] = string.Empty;
dr["Duration"] = string.Empty;
dr["DurationType"] = string.Empty;
dr["Amount"] = string.Empty;
dt.Rows.Add(dr);
return dt;
}
}
У вас есть пример, как мне это нужно? –
Привет Брэд, нет, к сожалению, но это не сложно проверить, просто создайте метод, скопируйте код из блока «if post-back» и вызовите метод после удаления. – Afshin
да, но проблема в том, что нет способа пересинхронизации чисел, он делает это автоматически, но он просто не делает это сразу после того, как я нажму кнопку delete –