1
当前我正在使用哪种标准方式在GridView控件中执行编辑。但是这允许我一次只执行一个操作。在我的应用程序中,当一个字段的值变化时,当用户点击“更新”时。应该更新行并且还应该触发一个删除查询。在编辑操作同时发生时,在ASP.NET中的GridView控件中执行删除操作
我尝试使用手动编辑
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ID"
DataSourceID="sdsample1" Visible="False" OnRowEditing="GridView1_OnRowEditing" OnRowUpdated="GridView1_OnRowUpdated">
- 想获得在backnd当前编辑行的GridView中CheckBoxField字段值和8列
<asp:CheckBoxField DataField="Goal_Type" HeaderText="Goal_Type"
SortExpression="Goal_Type" />
protected void GridView1_OnRowEditing(object sender, GridViewEditEventArgs e)
{
((CheckBox)GridView1.Rows[GridView1.SelectedIndex].FindControl("Goal_Type"));
CheckBox chk2 = ((CheckBox)GridView1.Rows[GridView1.EditIndex].Cells[7].Controls[0]);
goal_type =Convert.ToString(chk2.Checked);
if(goal_type.Equals("False"))
Goal_flag.Value ="0";
else
Goal_flag.Value = "1";
}
然后,一旦我得到checkbox字段的值设置了一些标志变量,我在下面的函数中执行删除操作
protected void GridView1_OnRowUpdated(object sender, GridViewUpdatedEventArgs e)
{
CheckBox chk2 = ((CheckBox)GridView1.Rows[e.AffectedRows].Cells[7].Controls[0]);
Boolean goal_type = chk2.Checked;
if (goal_type == true && Goal_flag.Value.Equals("0"))
{
string connectionString =
WebConfigurationManager.ConnectionStrings["DataCollectionConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd;
int ID = Convert.ToInt32(((TextBox)GridView1.Rows[e.AffectedRows].FindControl("ID")).Text);
cmd =new SqlCommand("Delete from XXX WHERE (ID = " + ID + ") ", con);
cmd.CommandType =
CommandType.Text;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
我在“GridView1_OnRowEditing”函数本身出现此错误 索引超出范围。必须是非负数且小于集合的大小。 参数名称:索引
请让我知道如果我的方法在GridView中同时操作是正确的。