我有一个gridview我希望当我点击gridview中的“编辑”按钮然后编辑插入在gridview之外的控件中的行值然后删除行。我可以在“编辑”事件中调用“删除”事件方法,因为我想首先检索控件中的值,然后删除行。
这是我的aspx.cs代码。这里删除和编辑事件代码:
protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
DataTable t = (DataTable)Session["MyDataTable"];
t.Rows.RemoveAt(e.RowIndex);
GridView2.DataSource = t;
GridView2.DataBind();
}
public void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
DataTable t = (DataTable)Session["MyDataTable"];
TextBox1.Text=GridView2.Rows[e.NewEditIndex].Cells[1].Text.ToString();
DropDownList1.Text = GridView2.Rows[e.NewEditIndex].Cells[2].Text.ToString();
GridView2.EditIndex = -1;
GridView2.DataSource = t;
GridView2.DataBind();
//CAN I CALL GRIDVIEW_ROW_DELETING method here? I try but problem is arguments etc
}
答案 0 :(得分:2)
正如Emanuaele所说,有更好的方法可以做到这一点,但是如果你想让你的代码接近你所拥有的代码,请将你的删除代码移到一个单独的方法中
protected void DeletingRow(int rowIndex)
{
DataTable t = (DataTable)Session["MyDataTable"];
t.Rows.RemoveAt(rowIndex);
GridView2.DataSource = t;
GridView2.DataBind();
}
然后GridView2_RowDeleting将更改为
protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
DeletingRow(e.RowIndex);
}
并且GridView2_RowEditing将更改为
public void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
DaTable t = (DataTable)Session["MyDataTable"];
TextBox1.Text=GridView2.Rows[e.NewEditIndex].Cells[1].Text.ToString();
DropDownList1.Text = GridView2.Rows[e.NewEditIndex].Cells[2].Text.ToString();
GridView2.EditIndex = -1;
GridView2.DataSource = t;
GridView2.DataBind();
//CAN I CALL HERE GRIDVIEW_ROW_DELETING METHOD,I try but problem is arguemnts etc
DeletingRow(e.NewEditIndex);
}
答案 1 :(得分:0)
如果数据来自数据库,则方法错误。 你必须处理数据,而不是页面控制(你可以,但最好不要这样做。)
不要使用Session来存储Datatable(有多少条记录?)
使用按钮的CommandArgument
获取记录的ID。
从数据库中检索记录并在控件中存储字段。单击按钮,保存数据,删除记录并重新绑定。
使用您的方法,您可以在私有方法中移动删除事件的代码,并从编辑事件
中调用它