2012-06-15 4 views
0

Я пытаюсь использовать раскрывающийся список, который я привязал к ячейке в GridView, чтобы вызвать оператор SQL UPDATE для изменения записи в самом GridView. Вот код ниже:Обновление OracleTransaction Gridview через раскрывающийся список

<asp:TemplateField HeaderText="Send To..."> 
       <ItemTemplate> 
        <asp:DropDownList ID="StatusDD" runat="server" AutoPostBack="false" OnSelectedIndexChanged="StatusDD_SelectedIndexChanged"> 
         <asp:ListItem Value="A">Active</asp:ListItem> 
         <asp:ListItem Value="C">Complete</asp:ListItem> 
         <asp:ListItem Value="I">In Process</asp:ListItem> 
         <asp:ListItem Value="E">Error</asp:ListItem> 
        </asp:DropDownList> 
       </ItemTemplate> 
      </asp:TemplateField> 

А вот код позади, это где блок моя попытка поймать-вешает мою страницу на ExecuteNonQuery(). Является ли это правильным синтаксисом того, как делать обновление? Я отключил AutoPostBack, как вы можете видеть выше, но это ничего не делал для меня все равно:

protected void StatusDD_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     DropDownList ddl = sender as DropDownList; 
     ToroGeneral toro = new ToroGeneral(); 
     string connString = toro.GetOracle1ConnectionString(); 

     using (OracleConnection conn1 = new OracleConnection(connString)) 
     { 
      foreach (GridViewRow row in MMRGrid.Rows) 
      { 
       Control ctrl = row.FindControl("StatusDD") as DropDownList; 
       if (ctrl != null) 
       { 
        DropDownList ddl1 = (DropDownList)ctrl; 
        string qString = ""; 
        // PreQuery work 
        DropDownList temp = new DropDownList(); 
        temp = (DropDownList)row.FindControl("StatusDD"); 
        string uKey = row.Cells[12].Text; 
        string tempStr = temp.SelectedValue.ToString().Trim(); 

        if (ddl1.SelectedValue == "A") 
        { 
         qString = "UPDATE MATERIALMOVEREQUEST SET PROCESS_FLAG = 'A' WHERE UNIQUEKEY = '" + uKey + "'"; 
        } 
        else if (ddl1.SelectedValue == "E") 
        { 
         qString = "UPDATE MATERIALMOVEREQUEST SET PROCESS_FLAG = 'E' WHERE UNIQUEKEY = '" + uKey + "'"; 
        } 
        else if (ddl1.SelectedValue == "I") 
        { 
         qString = "UPDATE MATERIALMOVEREQUEST SET PROCESS_FLAG = 'I' WHERE UNIQUEKEY = '" + uKey + "'"; 
        } 
        else if (ddl1.SelectedValue == "C") 
        { 
         qString = "UPDATE MATERIALMOVEREQUEST SET PROCESS_FLAG = 'C' WHERE UNIQUEKEY = '" + uKey + "'"; 
        } 
        else 
        { 
         // Error 
        } 

        // Change the value of the record in the database. 
        conn1.Open(); 
        OracleCommand cmd = conn1.CreateCommand(); 
        OracleTransaction myTrans; 
        cmd.CommandText = qString; 
        myTrans = conn1.BeginTransaction(IsolationLevel.ReadCommitted); 
        cmd.Transaction = myTrans; 

        if (cmd.Connection.State == ConnectionState.Closed) 
        { 
         cmd.Connection.Open(); 
        } 

        try 
        { 
         cmd.ExecuteNonQuery(); 
         myTrans.Commit(); 
        } 
        catch 
        { 
         myTrans.Rollback(); 
        } 


       } // if 
      } // foreach 
     } 

ответ

0

Почему бы вам не использовать:

string updateSql = "UPDATE MATERIALMOVEREQUEST SET PROCESS_FLAG = :parameter1 WHEREUNIQUEKEY = :parameter2";" 

OracleCommand cmd = new OracleCommand(updateString, conn1); 
cmd.BindByName = true; 
cmd.Parameters.Add("parameter1", Convert.ToChar(ddl1.SelectedValue); 
cmd.Parameters.Add("parameter2", uKey); 
myTrans = conn1.BeginTransaction(IsolationLevel.ReadCommitted); 
cmd.Transaction = myTrans; 

try 
{ 
    cmd.ExecuteNonQuery(); 
    myTrans.Commit(); 
} 
catch 
{ 
    myTrans.Rollback(); 
}