APuntes de AJAX para crear una aplicacion con ajax y paneles los pasos son 1.- crear una pagina e indicarle que va se hacer una pagina de ajax file/new/web site/ajax Control toolkit web site 2.- inserto la pagina maestra : un new Item por medio del menu de herramientas selecciono ajax master page 3.- inserto la pagina de trabajo un new Item por medio del menu de herramientas selecciono ajax web form 4.- al agregar esta pagina se va insertar en el archivo de asp dos instrucciones llamada son las areas de la pagina de trabajo que se van ha pintar sin hacer parpadeo. Es decir las areas independientes que pueden ser individualmente pintadas estan definidas por esta instrucciones. los componentes que se vallan ha insertar en estas areas deben de estar contenidas en la instrucciones de asp llamada 5.- en el caso de los componentes que se vayan a insertar en los paneles deben de estar contenidas en la instruccion -para usaur las compoinentes de ajax debe siempre tener el componente de "ScriptManager" con que lo declare en la forma maestra auromaticamente esta disponible para las paginas que se inserten - cuando voy a crear la primera pagina del proyecto le digi que escoga ajax tollkit - por medio del boton de menu de herramientos agrego add new item ajax master page --para usuar los componentes de ajax si no utilize "ajax master page" si estoy usando una pagina normal, entonces debo insertar primero "Scrip manager" que se encuentra en la seja "ajax extension" si voy ha usar una extencion de la fecha (es decir es un componente que le va ha dar una funcionalidad a la caja TextBox) como si estubiera capturando la fecha de una caja de ayuda) para esto debo de insertar el componente "Caledar Extender" a un lado del componente que le voy a dar la funcionalidad ( la insercion del componente lo debo de hacer en forma de codigo(source)). una vez insertado me puedo insertarle en el codigo de asp la propiedad "TargetControlID" para indicarle a cual componenete se va ha ligar el componente. por ejemplo el codigo de asp cuando se liga al componente FechaNacimientoTextBox seria : donde se le esta indicando con la propiedad PopupPosition="BottomRight" que la caja de ayuda para la captura de la fecha aparecera en la parte de abajo-derecha del componente. campo se va ha ligar esto es por medio de la propiedad ". Para agregarle con cual componente se va ha ligar lo tengo que poner manualmente en asp (es decir en modo codigo-source). Si le dor clik en el nombre de del componente "CalendarExtender" en forma de codigo me mostrara en la ventana de propiedades sus campos donde lo puedo modificar por ejemplo donde quiero que se presente la caja de ayuda de la fecha, esto es con el campo "PopupPosition" lo raro que estas propiedades no veo con cual caja de texto esta ligado , sino lo se porque lo estoy viendo en el codigo. Tambien otra forma de ver que una caja de texto tiene una funcionalidad extra es porque cuando le doy click en forma de Diseño mues muestra al final del nombre del componente una estrellita. Ademas si veo las propiedades vere que le agrego una seccion mas de datos que se llama "CalendarExternder2" que puedo desplegar sus propiedades para ver como esta definido (acuerdate que no ves contra cual campo esta ligado porque parece que lo considera que ya esta intrinsico) - esto es de asp : cuando tengo una tabla por ejemplo de cuatro columnas y quiero insertar un renglon en esa tabla pero con una sola columna por ejemplo para poner el titulo debo de indicar que se va a crear un renglon pero que abarque las 4 columnas esto se hace con la instruccion "colSpan" ejemplo "Entrevista" -si le quiero agregar al componente DropListDown un blanco a la lista de elementos, en el evento donde se ligan los datos pongo protected void DropDownList1_DataBound(object sender, EventArgs e) { (sender as DropDownList).Items.Insert(0, string.Empty); } ******************************************************************************* para dar la funcionalidad a un componente de DropDownList que dependa del valor otro componente DropDownList se va ha utilizar dos cosas 1.- se le va ha dar una funcionalidad extra al componenete DropListDown 2.- se va ha utilizar un servicio WebService para cargar los valores del componente DropDownList CREAR UN WEB SERVICE -Primero se le agrega una WebService al pryecto - se le agrega las siguientes librerias using System.Collections.Generic; using System.Collections.Specialized; using System.Data; using System.Data.SqlClient; using System.Configuration; - se descorcheta una linea que ya viene en el programa [System.Web.Script.Services.ScriptService] - se crea un metodo para cargar los datos que va ha tener el DropDownList con los siguientes pasos 1.- se crea los datos que se van a poner en el componente DropDownList string sql = "select nombre from promociones where estatus = 'vigente' order by orden"; SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["posgradoConnectionString"].ConnectionString); SqlDataAdapter adaptador = new SqlDataAdapter(sql, cnn); DataSet ds = new DataSet(); adaptador.Fill(ds,"promociones"); 2.- se crea un objeto de AJAX donde se va ha dejar los valores que va ha tener el componente DropDownList List valores = new List(); 3.- se cargan los valores al componente de AJAX for (int i=0; i /// Summary description for ProgramasPromocionWebService /// [WebService(Namespace = "http://aplicaciones.colef.mx/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. [System.Web.Script.Services.ScriptService] public class ProgramasPromocionWebService : System.Web.Services.WebService { public ProgramasPromocionWebService () { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public AjaxControlToolkit.CascadingDropDownNameValue[] TraePromociones(string ValoresConocidos , string categoria) { string sql = "select nombre from promociones where estatus = 'vigente' order by orden"; SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["posgradoConnectionString"].ConnectionString); SqlDataAdapter adaptador = new SqlDataAdapter(sql, cnn); DataSet ds = new DataSet(); adaptador.Fill(ds,"promociones"); List valores = new List(); for (int i=0; i'> quedando el codigo: b) en el diseño al editar la forma (modificacion o insercion) en la opcion "Editing DataBinding" se pone en la opcion "Custom Binding" = Bind("Promocion") si el campo de la base de datos de llama promocion 7.- tambien checar que esten vacios las propiedades del componente DropDownLis siguientes: -DataSourceId -DataTextField -DataValueField ************************************************************************************************* como definir aun componente DropDownList para que acepte nulos: de agregan dos propiedades - AppendDataBoundItems="true" - el codigo final como quedaria : ******************************************************************************************************* Para mostrar una imagen en una pagina se hacen los siguientes pasos : 1.- en el explorador de soluciones en el folder de "IMAGES" agregar la imagen con la opcion "Add existing Item" y buscar la imagen deseada 2.- agregar el componenete "IMAGE" del Toolbox de del grupo de componentes "Standar" 3.- en la propiedad "ImageUrl" poner la imagen deseada *********************************************************************************************** para accesar los campos del registro antes de borrar insertar o editar los datos hay que usar el metodo del FormView. estos metodos tienen un parametro que es -->>> FormViewInsertEventArgs e <<<-- donde se guardan los datos del registro. el siguiete codigo se puso antes de insertar el registro y se valida que no haya campos vacios de lo contrareo se manda un recado con los campos que debe de capturar y se cancela la insercion. void EmployeeFormView_ItemInserting(Object sender, FormViewInsertEventArgs e) { MessageLabel.Text = ""; // Iterate through the items in the Values collection // and verify that the user entered a value for each // text box displayed in the insert item template. Cancel // the insert operation if the user left a text box empty. foreach (DictionaryEntry entry in e.Values) { if (entry.Value.Equals("")) { // Use the Cancel property to cancel the // insert operation. e.Cancel = true; MessageLabel.Text += "Please enter a value for the " + entry.Key.ToString() + " field.
"; } } } otro ejemplo seria al borrar : void EmployeeFormView_ItemDeleting(Object sender, FormViewDeleteEventArgs e) { // Get the employee ID, name, and job title from the Keys and Values // properties. String keyValue = e.Keys["EmployeeID"].ToString(); String employeeName = e.Values["FirstName"].ToString() + " " + e.Values["LastName"].ToString(); String title = e.Values["Title"].ToString(); // Cancel the delete operation if the user attempts to // delete a protected record. In this example, records for // employees with a "Sales Manager" job title are protected. if (title.Equals("Sales Manager")) { e.Cancel = true; MessageLabel.Text = "You cannot delete record " + e.RowIndex.ToString() + ". " + employeeName + " (Employee Number " + keyValue.ToString() + ") is protected."; } } ******************************************************************* el codigo de asp que se necsita poner en el FormView para que la paginacion muestre los botones de primero , anterior , siguiente , ultimo se debera antes de terminar el comando de
************************************************************************************ pagina de documentacion para ver como funciona FormView http://msdn2.microsoft.com/en-us/library/system.web.httpcontext(VS.85).aspx http://msdn2.microsoft.com/en-us/library/ms366539.aspx http://msdn2.microsoft.com/en-us/library/ms228214.aspx FormView documentacion http://msdn2.microsoft.com/en-us/library/ms227992.aspx ************************************************************************************ cuando estoy usando el componente FormView y quiro hacer algo con los datos que estoy mostrando (por ejemplo mostrar el nombre del alumno) 1.- hay un metodo del FormView que se llama "PageIndexChanged" el cual se ejecuta cuando se cambia de registro ahi se mete el codigo 2.- creo un componente DataView para guardar los registros que estoy trabajando. Este componente se podra usar como un arreglo. 3.- el componente FormView tiene una propiedad que me indica cual registro de mi arreglo estoy viendo . La propiedad es PageIndex 4.- el siguiente codigo pone en la etiqueta NombreAlumnoLabel.Text el incremental del alumno que estoy viendo. protected void BecaActualFormView_PageIndexChanged(object sender, EventArgs e) { DataView dv = (DataView)BecasActualesSqlDataSource.Select(DataSourceSelectArguments.Empty); NombreAlumnoLabel.Text = dv[BecaActualFormView.PageIndex]["IncAlumno"].ToString(); } *************************************************************************************************************** para accesar el valor de un objeto de una componenete insertado en un FormView es NombreAlumnoLabel.Text = (BecaActualFormView.FindControl("IncAlumnoTextBox") as TextBox).Text; en teoria me trae lo que vale el componente "IncAlumnoTextBox" *************************************************************************************************************** EL SIGUIENTE CODIGO ES PARA ACCESAR MANUALMENTE LOS REGISTROS Y CAMPOS QUE ESTA EN qlDataSource NombreAlumnoLabel.Text = ""; DataView dv = (DataView)BecasActualesSqlDataSource.Select(DataSourceSelectArguments.Empty); foreach (DataRowView drv in dv) { NombreAlumnoLabel.Text = NombreAlumnoLabel.Text + ">>>" + drv["IncAlumno"].ToString(); } -en dv que es un DataView guardo los registros -el paramentro : DataSourceSelectArguments.Empty : es para indicar que la informacion que va ha cargar no emplee ningun orden *************************************************************************************************************** siguiente codigo es para mostrar el nombre del alumno cada vez que se mueve de registro protected void BecaActualFormView_PageIndexChanged(object sender, EventArgs e) { // en dv esta todos los registros que estoy viendo // la variable DataSourceSelectArguments.Empty indica que no va utilizar sorteo de datos DataView dv = (DataView)BecasActualesSqlDataSource.Select(DataSourceSelectArguments.Empty); string IncrementalAlumno = dv[BecaActualFormView.PageIndex]["IncAlumno"].ToString(); SqlConnection cnn = new SqlConnection(BecasActualesSqlDataSource.ConnectionString.ToString()); SqlCommand cmd = new SqlCommand("select ApellidoPaterno +' ' + ApellidoMaterno + ' '+ nombre as AlumnoNombre " + "from alumnos where IncAlumno = @codigoAlumno", cnn); cnn.Open(); cmd.Parameters.AddWithValue("@CodigoAlumno", IncrementalAlumno); NombreAlumnoLabel.Text = cmd.ExecuteScalar().ToString(); } el caomando cmd.ExecuteScalar().ToString(); me trae el primer campo del primer registro del sql que se este executando alguna varuaciones son string x = (string) cmd.ExecuteScalar() int i = (int) cmd.ExecuteScalar() string a = cmd.ExecuteScalar().ToString(); en el caso del codigo anterior es mejor usar cmd.ExecuteScalar().ToString(); porque si hay un nulo al trae los datos me marcaba error al usar la instruccion NombreAlumnoLabel.Text = (string) cmd.ExecuteScalar() este error esra porque estaba sumando campos con nulos