Sei sulla pagina 1di 9

.AddWithValue("@fecha_desde", If(DateTimePicker1.Value.Date <> DateTime.Now.

Date,
DateTimePicker1.Value.Date, CObj(DBNull.Value)))

.AddWithValue("@fecha_hasta", If(DateTimePicker2.Value.Date <> DateTime.Now.Date,


DateTimePicker1.Value.Date, CObj(DBNull.Value)))
*************
Para hacerlo todo en la misma l�nea, puedes utilizar el operador If.

Por ejemplo, para asignar los valores de los par�metros correspondientes a los
controles TextBox y ComboBox, lo har�as de la siguiente manera:

With Da.SelectCommand.Parameters
.AddWithValue("@nombre", If(txt_nombre.Text.Trim() <> "", txt_nombre.Text,
CObj(DBNull.Value)))
.AddWithValue("@apellido", If(txt_apellido.Text.Trim() <> "",
txt_apellido.Text, CObj(DBNull.Value)))

.AddWithValue("@jerarquia", If(ComboBox1.SelectedIndex <> -1,


ComboBox1.Text, CObj(DBNull.Value)))
End With
Es decir, si el valor de la propiedad Text NO es una cadena de longitud cero, o
existe un elemento seleccionado en el control ComboBox, le asignar�amos al
par�metro el valor de la propiedad Text; en caso contrario le asignar�amos un valor
DBNull.Value.

Ahora bien, �qu� valor NULL le quieres asignar a los valores DateTime de los
controles DateTimePicker? Su propiedad Value siempre tiene un valor de fecha y hora
v�lido. ;-)
*********
Efectivamente los campos alfanum�ricos que en un momento dado no llevan informaci�n
hay que validarlos antes de enviarlos a una tabla.
If Isnull(Campoa) then
Campoa=""
Endif
De igual manera cuando leo un campo alfanum�rico de una tabla tambi�n debo hacer la
validaci�n
If Isnull(Campotabla) then
Campot=""
Else
Campot=Campotabla
Endif
************
Que tal as�:

Fecha = system.DBNull.Value

Donde fecha es un objeto del tipo IParameter.


**********
seguramente fecha lo tiene como nullable
Nullable(of DateTime) VB.net
o Nullable<DateTime> C#

el detalle esta no en tu capa de negocios si no en la de datos y deber�as hacer


algo como

sqlparameter.AddWithValue("fechax",fecha.hasValue? fecha.Value:DBNull.Value)

*********
Amigos gracias por la colaboracion, ok efectivamente el campo fecha que es una
propiedad de una clase esta declarado dentro de la clase como System.NullAble(Of
Date).

Obj es una instancia de esa clase, y con obj acceso a las propiedades de esa clase,
dentro de la clase tengo declaradas las funciones para hacer insert, delete, select
ect, ene ste caso del ejemplo lo que estoy asiendo agregando un nuevo registro.

aun no estoy claro que tiene que ver el que declare la propiedad fecha
System.NullAble(Of Date).

en la clase esta declarada de esta manera.

Public Property fecha() As Nullable(Of Date)


Get
Return (m_fecha)
End Get
Set(ByVal Value As Nullable(Of Date))
m_fecha = Value
End Set
End Property
************
Private Sub WorkWithSqlNulls()
Dim table As New DataTable()

' Specify the SqlType for each column.


Dim idColumn As DataColumn = _
table.Columns.Add("ID", GetType(SqlInt32))
Dim descColumn As DataColumn = _
table.Columns.Add("Description", GetType(SqlString))

' Add some data.


Dim row As DataRow = table.NewRow()
row("ID") = 123
row("Description") = "Side Mirror"
table.Rows.Add(row)

' Add null values.


row = table.NewRow()
row("ID") = SqlInt32.Null
row("Description") = SqlString.Null
table.Rows.Add(row)

' Initialize variables to use when


' extracting the data.
Dim isColumnNull As SqlBoolean = False
Dim idValue As SqlInt32 = SqlInt32.Zero
Dim descriptionValue As SqlString = SqlString.Null

' Iterate through the DataTable and display the values.


For Each row In table.Rows
' Assign values to variables. Note that you
' do not have to test for null values.
idValue = CType(row("ID"), SqlInt32)
descriptionValue = CType(row("Description"), SqlString)

' Test for null value with ID column


isColumnNull = idValue.IsNull
' Display variable values in console window.
Console.Write("isColumnNull={0}, ID={1}, Description={2}", _
isColumnNull, idValue, descriptionValue)
Console.WriteLine()
Next row
End Sub
************
Esta peque�a funci�n te permite obtener el valor de un campo de una tabla x.

Function obtener_valor_sql(ByVal sql As String) As String


Dim cnn As New SqlClient.SqlConnection
Dim cmd As New SqlClient.SqlCommand
Dim dt As New DataTable

cnn = cn.conectar_sqlserver
dt = obtener_datasource_sql(sql)
If dt.Rows.Count > 0 Then
cnn.Close()
cnn.Dispose()
cnn = Nothing
Return dt.Rows(0).Item(0).ToString
Else
cnn.Close()
cnn.Dispose()
cnn = Nothing
Return ��
End If

End Function
*****
C�mo comprobar el valor NULL en Visual Basic

?
?
Educaci�n
Obtener el valor que desee para comprobar nulo. Esto se puede hacer a trav�s de un
cuadro de texto en el m�dulo de Visual Basic o podr�a ser un valor de retorno de la
funci�n InputBox.

Guarde este valor en una variable de cadena con el operador de asignaci�n. Por
ejemplo, puede utilizar esta l�nea de c�digo para almacenar el valor de un cuadro
de texto llamado txtName en el formulario: strValue = txtName.text.

?
Comparar la variable con la palabra clave Null en un comunicado " si ". Esto se
puede hacer con esta l�nea de c�digo: Si strValue = null entonces. Si desea
asegurarse de que la variable no es nulo, puede utilizar la funci�n IsNull, como se
muestra en el paso 4.

Compruebe el valor de la variable con la funci�n IsNull. Este c�digo puede tener
este aspecto: If IsNull (strValue). La funci�n IsNull devuelve un valor verdadero o
falso para su uso.

Completar el c�digo dentro de la parte real de la " Si " comunicado. La parte real
de " Si " declaraci�n se ejecuta cuando la variable es nula. Si la variable
contiene otra cosa que nada, el c�digo seguir� siendo la parte falsa del if (" tras
otro ") oa la siguiente l�nea de c�digo (despu�s " End If ").
*****************
Al estar enlazado el control ComboBox con un origen de datos, �nicamente tendr�as
que verificar el valor de la propiedad SelectedValue, para saber si su valor es
Nothing. Antes de actualizar la base de datos, ejecutar�as:

' Elemento seleccionado del control ComboBox.


'
Dim value As Object = Me.RedComboBox.SelectedValue

If (value Is Nothing) Then


MessageBox.Show("Debe Seleccionar Una Red")
Return
End If

Si el elemento no es Nothing, est� claro que el usuario ha seleccionado un elemento


existente en el control ComboBox.

> If LTrim(Nom_AnfitrionTextBox.Text) = "" Then


> MsgBox("Debe Ingresar un Nombre")
> Exit Sub
> End If

Si deseas saber si el valor de la propiedad Text de cualquier control es una cadena


de longitud cero (""), mejor ser� que lo verifiques de la siguiente manera:

If (Nom_AnfitrionTextBox.Text = String.Empty) Then


MessageBox.Show("Debe Ingresar un Nombre")
Return
End If

> 2.Porque cuando doy guardar de vez en cuando algun combobox me envia el valor
Null
> de la base de datos, yo se que el campo no admite Null...

Esto s� que no lo entiendo. Si el campo de la tabla no admite valores NULL,


obtendr�s una excepci�n (error) cuando intentes pasarle un valor NULL.
***********
Intenta con la propiedad ComboBox.SelectedIndex <> -1
************
disculpa tienes algun ejemplo de como utilizar esta propiedad
ComboBox.SelectedIndex <> -1 no se si aplicandola asi esta bien

If RedComboBox.SelectedIndex <> -1 Then


MsgBox("Debe Seleccionar Una Red")
End If
*******************
WinForms ComboBox

El combobox de una aplicaci�n estilo �Windows Application� puede recibir como


origen de datos diferentes fuentes, podr�as ser una clase especifica creada por
uno, o podr�as ser un dataset. Seg�n cual sea el origen de datos cambia la soluci�n
que debe aplicarse para agregar este �tem extra opcional de la lista, ya que ser�
el origen de datos donde se agrega la opci�n especial.

Agregar opci�n usando clases creadas por uno

En el ejemplo se ha definido una clase de nombre �Producto�, es muy simple, solo


cumple la funci�n de definir la informaci�n que necesitas el control.
public class Producto
{
public string Descripcion { get; set; }
public int Id { get; set; }
public int Precio { get; set; }
}
El c�digo que carga una lista de tipo Producto y la asigna como origen de datos al
combo, es el siguiente:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)


{

cbProductos.ValueMember = "Id";
cbProductos.DisplayMember = "Descripcion";
cbProductos.DataSource = ObtenerListItemOpcional();

private List<Producto> ObtenerListItemOpcional()


{
List<Producto> listproductos = ObtenerLista();

listproductos.Insert(0, new Producto() { Id = 0, Descripcion = "<Seleccione


un Item>", Precio = 0 });

return listproductos;
}

private List<Producto> ObtenerLista()


{
return new List<Producto>()
{
new Producto(){ Id = 1, Descripcion = "Notebook HP Athlon Neo MV-40",
Precio = 3100},
new Producto(){ Id = 2, Descripcion = "Notebook ASUS ATOM N450", Precio
= 2300},
new Producto(){ Id = 3, Descripcion = "Notebook ACER N270", Precio =
2000},
new Producto(){ Id = 4, Descripcion = "Notebook SONY Atom TM", Precio =
2600},
new Producto(){ Id = 5, Descripcion = "Notebook DELL SU 4100", Precio =
3400},
new Producto(){ Id = 6, Descripcion = "Notebook ASUS Core i3", Precio =
4500}

};
}
}
La l�nea clave en donde se agrega el �tem que permitir� la selecci�n opcional es:

listproductos.Insert(0, new Producto() { Id = 0, Descripcion = "<Seleccione un


Item>", Precio = 0 });

Lo importante a remarcar es como el modelo original de datos no es alterado,


pudi�ndose cargar, si se necesita, un combo simple sin un �tem adicional, se
maximiza la reutilizaci�n de los m�todos separ�ndolos seg�n agregue o no el �tem
opcional.

Agregar opci�n usando un DataTable

En este caso se usara un datatable cuya estructura ser� definido en runtime, la


clave aqu� esta en el m�todo ObtenerListItemOpcional() donde se crea la nueva fila
en tiempo de dise�o.

public partial class Form2 : Form


{
public Form2()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)


{
cbProductos.DisplayMember = "Descripcion";
cbProductos.DataSource = ObtenerListItemOpcional();
}

private DataTable ObtenerListItemOpcional()


{
DataTable listproductos = ObtenerLista();

DataRow row = listproductos.NewRow();


row["Id"] = 0;
row["Descripcion"] = "<Seleccione un Item>";
row["Precio"] = 0;

listproductos.Rows.InsertAt(row, 0);

return listproductos;
}

private DataTable ObtenerLista()


{
DataTable dt = new DataTable();

dt.Columns.Add("Id");
dt.Columns.Add("Descripcion");
dt.Columns.Add("Precio");

DataRow row = dt.NewRow();


row["Id"] = 1;
row["Descripcion"] = "Notebook HP Athlon Neo MV-40";
row["Precio"] = 3100;
dt.Rows.Add(row);

row = dt.NewRow();
row["Id"] = 2;
row["Descripcion"] = "Notebook ASUS ATOM N450";
row["Precio"] = 2300;
dt.Rows.Add(row);

row = dt.NewRow();
row["Id"] = 3;
row["Descripcion"] = "Notebook ACER N270";
row["Precio"] = 2000 ;
dt.Rows.Add(row);

row = dt.NewRow();
row["Id"] = 4;
row["Descripcion"] = "Notebook SONY Atom TM";
row["Precio"] = 2600;
dt.Rows.Add(row);

row = dt.NewRow();
row["Id"] = 5;
row["Descripcion"] = "Notebook DELL SU 4100";
row["Precio"] = 3400;
dt.Rows.Add(row);

row = dt.NewRow();
row["Id"] = 6;
row["Descripcion"] = "Notebook ASUS Core i3";
row["Precio"] = 4500;
dt.Rows.Add(row);

return dt;
}
}

En caso de usar un dataset tipado, la t�cnica es la misma solo que se dispondr� de


m�todo espec�ficamente creados por el dataset en tiempo de dise�o, en el ejemplo no
se contemplo este caso, pero ante la necesidad de usarlo podr�a ser algo como lo
siguiente
private dtoProducto.ProductosDataTable ObtenerListItemOpcional()
{
dtoProducto.ProductosDataTable dt = ObtenerLista();

dtoProducto.ProductosRow row = dt.NewProductosRow();


row.Id = 0;
row.Descripcion = "<Seleccione un Item>";
row.Precio = 0;
dt.Rows.Add(row);

return dt;
}
**************
Si el control ComboBox se encuentra enlazado a un origen de datos, no vas a poder
modificar su colecci�n Items.

Si se encuentra enlazado a un objeto DataTable, antes de especificar su propiedad


DataSource, puedes a�adir las filas que desees a dicho objeto DataTable, tal y como
muestra el siguiente ejemplo:

' A�adimos una nueva fila al objeto DataTable


Dim row As DataRow = dt.NewRow

' Establecemos el valor del campo Nombre


row("Campo_DisplayMember") = "Todos"

' Establecemos el valor de otro Campo


row("Campo_ValueMember") = 0

' Insertamos la fila en la primera posici�n


dt.Rows.InsertAt(row, 0)

ComboBox1.DataSource = dt
ComboBox1.DisplayMember = "Campo_DisplayMember"
ComboBox1.ValueMember = "Campo_ValueMember"

Un saludo
***********
Nota: Suponiendo que estas filtrando mediante los nombres de los productos, es
decir en un ComboBox estan los nombres de los productos, y de acuerdo a ello vas
filtrando al DataGridView, entonces harias lo siguiente!

Dim dvProductos As DataView


Private Sub BtnFiltrar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnFiltrar.Click
Dim vCadenaFiltro As String
If cboLetraInicial.Text = "<ALL>" Then
vCadenaFiltro = "ProductName like '%'"
Else
Aqui hiria las otras cosas que haces...
End If
'Aplicar el Filtro
dvProductos.RowFilter = vCadenaFiltro
DataGridView1.DataSource = dvProductos
End Sub
Con esto estarias filtrando nuevamente todos los registros de tu tabla Products en
tu control DataGridView
*************

Potrebbero piacerti anche