Hola a todos, estoy comenzando a programar con ASP .NET y como no, ya llegan los primeros problemas. Estoy intentando editar un datagrid al que lehe puesto que ordene por alguna columna. Si pincho para que me ordene por la columna "nombre" me lo hace, pero al pinchar en editar el primer registro del datagrid, no me edita el primero resultante de la ordenacion, me edita el primero que habia. Os muestro el codigo por si me podeis ayudar:
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="iso-8859-1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<script language="C#" runat="server">
String columnaOrdenacion="";
void Page_Load(Object sender, EventArgs e) {
if (!IsPostBack) {
if (columnaOrdenacion == "") {
columnaOrdenacion = "PaisNombre";
}
estableceDataBinding();
}
}
void estableceDataBinding(){
SqlConnection conexion =
new SqlConnection("server=127.0.0.1;database=prueba;ui d=userprueba;pwd=userprueba");
SqlDataAdapter comando =
new SqlDataAdapter("select * from Pais", conexion);
DataSet ds = new DataSet();
comando.Fill(ds, "Pais");
ds.Tables["Pais"].DefaultView.Sort=columnaOrdenacion;
tabla.DataSource = ds.Tables["Pais"].DefaultView;
tabla.DataBind();
}
void pulsadoEdicion(object Sender, DataGridCommandEventArgs e) {
tabla.SelectedIndex=-1;
tabla.EditItemIndex = e.Item.ItemIndex;
estableceDataBinding();
}
void pulsadoCancelacion(object Sender, DataGridCommandEventArgs e) {
tabla.EditItemIndex=-1;
tabla.SelectedIndex=-1;
estableceDataBinding();
}
void pulsadoActualizar(object Sender, DataGridCommandEventArgs e) {
SqlConnection conexion =
new SqlConnection("server=127.0.0.1;database=prueba;ui d=userprueba;pwd=userprueba");
String strComando;
String txtidioma=((TextBox)e.Item.Cells[1].Controls[0]).Text;
String txtnombre=((TextBox)e.Item.Cells[2].Controls[0]).Text;
strComando="UPDATE pais SET PaisIdioma='"+txtidioma+"', PaisNombre='"+txtnombre+"' WHERE PaisId=" + tabla.DataKeys[(int)e.Item.ItemIndex];
SqlCommand comando = new SqlCommand(strComando, conexion);
comando.Connection.Open();
comando.ExecuteNonQuery();
tabla.EditItemIndex=-1;
tabla.SelectedIndex=-1;
estableceDataBinding();
}
void pulsadoOrdenar(Object sender, DataGridSortCommandEventArgs e) {
columnaOrdenacion= (string)e.SortExpression;
estableceDataBinding();
}
</script>
<body>
<form runat="server">
<asp:DataGrid id="tabla" runat="server"
BackColor="#FFFF99"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#FFCC33"
BorderWidth="1" GridLines="Both"
HeaderStyle-Font-Bold="True" AllowSorting="True"
OnSortCommand="pulsadoOrdenar" AutoGenerateColumns="False" OnEditCommand="pulsadoEdicion"
OnCancelCommand="pulsadoCancelacion" OnUpdateCommand="pulsadoActualizar"
DataKeyField="PaisId">
<Columns>
<asp:EditCommandColumn EditText="Editar" CancelText="Cancelar"
UpdateText="Actualizar" HeaderText="Edición"/>
<asp:BoundColumn DataField="PaisId" SortExpression="PaisId" HeaderText="Id"/>
<asp:BoundColumn DataField="PaisIdioma" SortExpression="PaisIdioma" HeaderText="Idioma"/>
<asp:BoundColumn DataField="PaisNombre" SortExpression="PaisNombre" HeaderText="Nombre"/>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>