2011-06-16 71 views
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中同时操作是正确的。

回答

0

将RowEditing事件用于多个更新。在本issue提到:

protected void ASPxGridView1_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e) { 
    datasource.UpdateCommand = "UPDATE ....."; 
    datasource.Update(...); 

    datasource.UpdateCommand = "UPDATE ....."; 
    datasource.Update(...); 

    datasource.UpdateCommand = "UPDATE ....."; 
    datasource.Update(...); 

    e.Cancel = true; 
    ASPxGridView1.CancelEdit(); 
} 

为了找到控制我建议在这个问题中提到的方法: http://www.devexpress.com/Support/Center/p/Q91970.aspx

protected void grd_ReportChartSeries_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e) { 
    ASPxGridView gridView = sender as ASPxGridView; 
    ASPxComboBox combo = gridView.FindEditRowCellTemplateControl(gridView.Columns["Data2"] as GridViewDataColumn, "comboData2") as ASPxComboBox; 
    object data2 = combo.Value; 

    combo = gridView.FindEditRowCellTemplateControl(gridView.Columns["ID"] as GridViewDataColumn, "comboID") as ASPxComboBox; 
    object ID = combo.Value; 

    ASPxTextBox textBox = gridView.FindEditRowCellTemplateControl(gridView.Columns["Data1"] as GridViewDataColumn, "txtData1") as ASPxTextBox; 
    object data1 = textBox.Value; 

    ds = Session["DataSet"] as DataSet; 
    DataTable dataTable = ds.Tables[0]; 
    DataRow row = dataTable.Rows.Find(e.Keys[0]); 
    row["ID"] = ID; 
    row["Data1"] = data1; 
    row["Data2"] = data2; 
    gridView.CancelEdit(); 
    e.Cancel = true; 

} 

或者你可以做更新,并通过一个存储过程调用删除。

相关问题