miércoles, 28 de abril de 2010

nombre del archivo PDF por medio de codigo con PDFcreator



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

Existe la necesidad de que el nombre del archivo PDF sea creado desde nuestro código de visual net. Porque?, una de las razones basicas es para tener mayor control sobre los nombres, sobre todo si hacen referencia a numeros, como pueden ser: Ordenes de compra, Número de factura etc. El usuario facilmente se equivoca al poner el nombre y se pierde el control
Bueno la forma en que yo he controlado esto, es la siguiente:
Asumiendo que oImpresion es una instancia de la clase PrintDocument, creamos una cadena y la asignamos a la propiedad DocumentName.

With oImpresion
.DocumentName = "OC" & txtordcompra.text
End With

En Autoguardado que es una opción de PdfCreator bajo el menu de opciones, configuramos mas o menos como sigue:
En nombre de archivo colocamos el nombre de la compañía- mas Title-DateTime que son elementos predefinidos.En Title, aparecera la cadena que hayamos puesto en DocumenteName.
Podemos seleccionar la opción de abrir y enviar por mail, asi como la ruta predefinidad donde iran quedando todos los archivos PDF.

miércoles, 21 de abril de 2010

CONTROLAR DOS COMBOBOX O VARIOS COMBOBOX DENTRO DE UN DATAGRIDVIEW



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

www.artprogramnet.wordpress.com
Cuando tenemos dos o mas controles de tipo combobox en un datagridview, nos puede ocurrir que tengamos que ocupar el evento SelectedValueChanged del combo para realizar alguna acción, como puede ser: validar algo, colocar valores en otra columna etc,etc. OJO, pero resulta que si creamos un evento de tipo SelectedValueChanged (lo tenemos que crear manualmente, puesto que no existe este evento en un combobox dentro de un datagridview), lo que sucede es que cuando es mas de un combo en nuestro grid se dispara el mismo evento para TODOS los combos. La solución es saber el nombre del combo que necesita el evento. Supongamos que tenemos dos combobox en un grid, uno trae los articulos y otro el tipo de descuento para ese articulo. Cuando ocupamos el combo de articulos, necesitamos agregar ciertos valores al grid y cuando ocupamos el combo de tipo de descuento no necesitamos hacer nada, unicamente seleccionar. Por lo tanto creamos un evento para combo articulos. Para eso ocupamos el evento del grid EditingControlShowing de la manera siguiente.
‘Nuestro grid se llama dgdetalles
Private Sub Dgdetalles_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgdetalles.EditingControlShowing
‘validamos si el control que se esta editanos es un combo
If e.Control.GetType Is getType(DataGridViewComboBoxEditingControl) Then
‘obtenemos el nombre del combo en una variable para decidir si creamos el evento o no
Dim cNombreCbo As String = dgdetalles.Columns(Me.dgdetalles.CurrentCellAddress.X).Name
‘validamos que el nombre del combo sea el de articulos Nota:si fuera ‘el de combo de tipo de precio no necesito crear ningun evento
If cNombreCbo = "cboNombreArt" Then
‘asignamos el control que nos interesa a una variable, esta variable ‘debe estar declarada como private
m_comboBox = DirectCast(e.Control, ComboBox)
' Instalamos el controlador para el evento SelectedValueChanged
‘y lo direccionamos a ComboBoxOnSelectedValueChanged
AddHandler m_comboBox.SelectedValueChanged, _
AddressOf ComboBoxOnSelectedValueChanged
End If ‘fin de añadir evente
End If ‘fin de validar si el control es de tipo combobox
End Sub

‘aquí viene la rutina de lo que deseamos hacer para el combo de ‘articulos
Private Sub ComboBoxOnSelectedValueChanged( _
ByVal sender As Object, ByVal e As EventArgs)

' Referenciamos el control ComboBox que ha
' desencadenado el evento.
Dim cb As ComboBox = DirectCast(sender, ComboBox)
' Obtenemos el valor de su propiedad ValueMember
Dim valorseleccionado As Object = cb.SelectedValue
‘si deseamos ocupar el valor seleccionado, lo podemos poner en ‘el mismo grid o en cualquier otro lugar que se desee
‘en este caso particular lo coloco en otra columna llamada valor dgdetalles.Rows(dgdetalles.CurrentRow.Index).Cells("valor").Value = valorseleccionado.ToString
‘tambien grabo la orden de compra que se encuentra en una variable dgdetalles.Rows(dgdetalles.CurrentRow.Index).Cells("Orden").Value = sOrdCompra
End sub
‘en el rowvalidating eliminamos el evento creado '
Private Sub dgdetalles_RowValidating( _
ByVal sender As Object, _
ByVal e As DataGridViewCellCancelEventArgs) _
Handles dgdetalles.RowValidating
‘validamos que el m_combobox tenga algun valor para eliminar el evento
If m_comboBox IsNot Nothing Then
' Desinstalamos el controlador de eventos
RemoveHandler m_comboBox.SelectedValueChanged, _
AddressOf ComboBoxOnSelectedValueChanged
End If
End Sub
Si conocen alguna otra tecnica para resolver el manejo de varios combos en un datagridview, no duden en enviarmela para compartirla. Saludos

viernes, 2 de abril de 2010

Eliminar fila seleccionada datagridview con SUPR, actualizar valor o stock en el evento UserDeletingRow y si es maestro/detalle eliminar datatable

 Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.
 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

 www.artprogramnet.wordpress.com
Un problema común es el siguiente:
Eliminar maestro/detalle con código con SUPR, en donde el maestro y detalle están en diferente datagridview, y actualizar un valor cualquiera, que puede ser: Restar un valor a un stock o factura.
Para Eliminar fila seleccionada de un datagridview con SUPR¨— la propiedad ALLOWUSERTODELETEDROWS debe estar como True—
El evento que se produce es UserDeletingRow
Suponiendo que tenemos dos datagridview, en uno tenemos los articulos(maestro) y en otro las fechas en que se vendieron(detalle). Lo que deseamos es que al borrar el articulo se actualice el total de ventas,
Podemos usar la siguiente rutina

Private Sub dgarticulos_UserDeletingRow(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowCancelEventArgs) Handles dgarticulos.UserDeletingRow
‘ponemos una variable en donde vendra el total de ventas de ese ‘articulo
Dim valprecio As Single = CType(e.Row.Cells("totprecio").Value, Single)
‘variable para colocar la clave del articulo a borrar
Dim scveart As String = e.Row.Cells("cveart").Value.tostring
‘preguntamos si realmente se desea borrar, ya que el usuario puede haber oprimido la tecla SUPR por equivocación
Dim respuesta As Integer
respuesta = MessageBox.Show("Deseas borrar este articulo?" & sgpoborrar, "Borrar Articulo", _
MessageBoxButtons.YesNo, _
MessageBoxIcon.Question, _
MessageBoxDefaultButton.Button2)
If respuesta = DialogResult.Yes Then
‘si queremos eliminar el registro e.cancel debe ser false
e.Cancel = False
‘aquí restamos el valor de las ventas del articulo eliminado
txtsuma.Text = CType((Val(txtsuma.Text) - valprecio), String)
'borra todos los elementos del datatable de fechas de venta que coincidan con este articulo
‘primero hacemos un filtro de la tabla donde estan las fechas de venta
Dim dv As DataView = New DataView(dtabfechasart)
Dim str As String = String.Empty
str = "cveart ='" & scveart & "'"
dv.RowFilter = str
‘recorremos la el dataview para marcar todas las fechas de venta para ese articulo como borradas
For i = dv.Count - 1 To 0 Step -1
dv.Delete(i)
Next
Else
‘si el usuario no desea borrar
e.Cancel = True
End If
End Sub.

‘al final, ya sea cuando vayan a grabar los datos a la base de datos en forma definitiva recuerden ocupar update y acceptchanges
Como en el siguiente ejemplo
‘maestro
daarticulos.Update(datarticulos)
datarticulos.AcceptChanges()
‘detalles
dafechasart.Update(dtabfechasart)
dtabfechasart.AcceptChanges()
Cualquier comentario es bienvenido