none
ArgumentNullException, no encuentro el motivo!!! RRS feed

  • Pregunta

  •  

    Hola! estoy trabajando en C#, haciendo una aplicacion que realiza una consulta a la base de datos, con los cuales se llena un control treeView. La idea es que se puedan ver los distintos sectores de la empresa, a su vez, por c/sector se puedan ver los empleados, y por c/empleado se puedan ver sus datos personales. Esta seria la jerarquia de los nodos.

    Lo que se me ocurrio (si hay una mejor por favor avisenme) es usar el constructor del objeto TreeNode que tiene dos parametros, uno es un string, con la etiqueta del nodo que se va a crear; y el otro es una coleccion TreeNode[] childNodes, que tiene los nodos hijos del nodo que se va a crear y que cuelgan de este. Entonces cuando creo un nodo 'sector', le paso a su constructor una coleccion de nodos 'empleado', que a su vez, cuando fueron creados estos ultimos les pase una coleccion de nodos 'datos personales'. Para crear c/coleccion de nodos utilizo dos funciones, para que el codigo no sea muy engorroso. Cuando llamo a una de estas funciones, me tira la excepcion 'ArgumentNullException' porque se supone que uno de sus parametros es nulo. Pienso que es la coleccion que estoy creando la que es nula, pero sin embargo antes de pasarsela a la funcion he probado recorrerla para ver si realmente es asi y no veo que sea null.

    No se entonces por donde viene el problema, necesitaria si alguien puede revisar el codigo y darme una mano. Desde ya muchas gracias!!! Saludos!!!

    Les anexo algo del codigo:

     

    Code Snippet

    #region Llena el control tree view con los datos de los empleados.

    System.Data.SqlClient.SqlConnection conexionIntranet = new System.Data.SqlClient.SqlConnection("Data Source=NETPROFILE;Initial Catalog=Intranet;Persist Security Info=True;User ID=sa;Password=sa");

    conexionIntranet.Open();

    System.Data.SqlClient.SqlCommand sectoresComm= conexionIntranet.CreateCommand();

    sectoresComm.CommandText = "SELECT DISTINCT Puesto FROM dbo.Personal WHERE Activo = 1 ORDER BY Puesto";

    System.Data.SqlClient.SqlDataReader lectorDeSectores= sectoresComm.ExecuteReader();

    //Una vez obtenido el conjunto de datos a partir de la consulta realizada,

    //se agregan los sectores al control tree view.

    TreeNode nodo;

    foreach (System.Data.Common.DbDataRecord registroBD in lectorDeSectores)

    {

    //Crea un nodo por cada sector y lo cuelga de la raiz de treeView

    nodo = new TreeNode(registroBD.GetValue(0).ToString(), crearMatrizDeNodosSecundariosPorSector(registroBD.GetValue(0).ToString()));

    this.treeView1.Nodes.Add(nodo);

    }

    conexionIntranet.Close();

    #endregion

    }

    private TreeNode[] crearMatrizDeNodosSecundariosPorSector(string sector)

    {

    int cantNodosSecundarios = 0;

    DataRow[] empleadosDeUnSector = this.intranetDataSet.Personal.Select("Puesto = '" + sector + "'");

    cantNodosSecundarios = empleadosDeUnSector.Length / empleadosDeUnSector.Rank;

    TreeNode[] colNodosSecundarios = new TreeNode[cantNodosSecundarios];

    int i = 0;

    foreach (DataRow empleado in empleadosDeUnSector)

    {

    colNodosSecundarios[i] = new TreeNode((string)empleado["Nombre"], crearMatrizDeNodosSecundariosPorEmpleado(empleado, intranetDataSet.Personal.Columns.IndexOf("Nombre")));

    i++;

    }

    return colNodosSecundarios;

    }

    private TreeNode[] crearMatrizDeNodosSecundariosPorEmpleado(DataRow empleado, int indiceDeLaColumnaNombre)

    {

    int cantNodosSecundarios = empleado.ItemArray.Length / empleado.ItemArray.Rank;

    TreeNode[] colNodosSecundarios = new TreeNode[cantNodosSecundarios];

    //Con el indice 'j' se recorre los distintos campos que tiene el data row 'empleado'

    //con el indice 'i' se recorre la coleccion de nodos 'colNodosSecundarios' que se agregara al control treeView.

    //Mientras que la columna del data row no corresponda con la columna 'Nombre'

    //se agrega un nuevo nodo a la coleccion de treeNodes, sino no lo agrega porque

    //el nombre del empleado ya se encuentra en el nodo superior, que es de donde se colgara

    //la coleccion de nodos 'colNodosSecundarios'.

    for (int i = 0, j = 0; j < cantNodosSecundarios; j++)

    {

    if (j != indiceDeLaColumnaNombre)

    {

    if (empleado.IsNull(j) == false)

    {

    colNodosSecundarios[i] = new TreeNode(empleado[j].ToString());

    }

    else

    {

    colNodosSecundarios[i] = new TreeNode("NULL");

    }

    i++;

    }

    }

    return colNodosSecundarios;

    }

     

     

    jueves, 14 de febrero de 2008 18:18

Respuestas

Todas las respuestas