Tengo un gridview que ha enlazado a datos de artículos. es enlazado a un SQLDATASOURCE. El valor predeterminado de Edición, Actualización funciona bien, sin embargo, quería realizar una consulta demasiado cuando el usuario actualiza la fila.

Aquí está mi aspx

  <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Customer_id"
DataSourceID="SqlDataSource1" 
EmptyDataText="There are no data records to display." AllowPaging="True" 
AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="Horizontal" 
PageSize="5" Width="873px"  OnRowCommand = "RunCustomMethod" >
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
CommandName="myCustomUpdateMethod" Text="Update" CommandArgument = '<%# Eval("Customer_ID") %>'
onclientclick="return Confirm ('Are You Sure You Want To Make These Changes?')"></asp:LinkButton>
&nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
CommandName="Cancel" Text="Cancel"></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" 
CommandName="Edit" Text="Edit" ></asp:LinkButton>
&nbsp;
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
CommandName="Select" Text="Select"></asp:LinkButton>
&nbsp;
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Customer_id" HeaderText="Customer_id" ReadOnly="True"
SortExpression="Customer_id" InsertVisible="False" />
<asp:TemplateField HeaderText="Customer_Name" SortExpression="Customer_Name">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Customer_Name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Customer_Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

Y aquí está mi Código de c#

  protected void RunCustomMethod(object sender, GridViewCommandEventArgs e)
{
//Custom Method To Update Row
if (e.CommandName == "myCustomUpdateMethod")
{
int customerID = Convert.ToInt32(e.CommandArgument);
SqlConnection conn = new SqlConnection(SqlDataSource1.ConnectionString);
SqlCommand Cmd = new SqlCommand();
try
{
conn.Open();
Cmd.CommandText = "update Customers set customer_name = '" + **I WANT TO GET THE UPDATED VALUE BUT FROM WHERE SHALL I GET IT?????** + "', modified_on = getdate(), modified_by = '" + System.Environment.UserName + "' where customer_id = '" + customerID + "'";
Cmd.CommandType = System.Data.CommandType.Text;
Cmd.Connection = conn;
Cmd.ExecuteNonQuery();
GridView1.DataBind();
//Close the Edit Mode
GridView1.EditIndex = -1;
}
catch (SqlException ee)
{
ValidationError.Display(ee.Message);
}
finally
{
Cmd.Dispose();
conn.Close();
conn.Dispose();
}
}
}
}

Cualquier ayuda sería muy apreciada

InformationsquelleAutor Ath An | 2012-09-14

3 Comentarios

  1. 2

    Creo que el código que estamos buscando es:

    GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
    string name = ((TextBox)row.FindControl("TextBox1")).Text
    Cmd.CommandText = "update Customers set customer_name = '" + name + "', modified_on = getdate(), modified_by = '" + System.Environment.UserName + "' where customer_id = '" + customerID + "'";
    • Hasta el punto, justo en el blanco. Gracias. Que resolver mi problema 🙂
    • No hay problema, en cualquier momento ;o) Encantados de ayudarle!
  2. 3

    Intentar algo como esto :

    string newTitle = ((TextBox)GridView_Galerie.Rows[e.RowIndex].FindControl("tb_titre")).Text;
    • usted no puede conseguir RowIndex directamente en este evento desde el EventArgs – estás solución funciona en OnRowDataBound pero no en OnRowCommand
  3. 0

    Escucha el mal suceso. Si desea obtener los valores antes de que se actualizan en la base de datos, usted debe escuchar a la RowUpdating evento.

    Consulte: RowUpdating

    protected void TaskGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {    
    //Retrieve the table from the session object.
    DataTable dt = (DataTable)Session["TaskTable"];
    //Update the values.
    GridViewRow row = TaskGridView.Rows[e.RowIndex];
    dt.Rows[row.DataItemIndex]["Id"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
    dt.Rows[row.DataItemIndex]["Description"] = ((TextBox)(row.Cells[2].Controls[0])).Text;
    dt.Rows[row.DataItemIndex]["IsComplete"] = ((CheckBox)(row.Cells[3].Controls[0])).Checked;
    //Reset the edit index.
    TaskGridView.EditIndex = -1;
    //Bind data to the GridView control.
    BindData();
    }

    También hay un RowUpdated evento, si desea ejecutar la consulta después de que los valores se actualizan en la base de datos.

Dejar respuesta

Please enter your comment!
Please enter your name here