Jorge Serrano
  • Home

El misterioso caso del CheckedListBox y el DataSource perdido

  • By jorge
  • Oct-26-2009
  • Sin categoría
  • 7 Comments.

Me encuentro trabajando en un proyecto en que por necesidades del guión, me veo obligado a utilizar un control de tipo CheckedListBox.

Hasta aquí, nada anormal en la necesidad solicitada… nada anormal a excepción del Intellisense de Visual Studio 2008, herramienta de marras que utilizo para tal fin, aunque he revisado que el comportamiento se repite en Visual Studio 2010 Beta 2 y versiones anteriores.

El caso es que cuando ya tengo mis datos de acuerdo a List<objeto> y trato de pasárselo al control CheckedListBox, me doy cuenta de que Intellisense no ve el tan querido DataSource.

Por un momento pienso… «es imposible que a la gente de Microsoft se le haya pasado esto por alto.«.
Por otro lado pienso… «si se les ha pasado por alto, tendré que hacerme un bucle para recorrer la colección e ir agregando cada elemento uno a uno…, un rollo, pero al menos solventaría el problema.«.

No obstante, uno que es más desconfiado que nada y más terco aún, mira y remira la primera de las opciones y piensa… «debe haber alguna forma…«, así que me pongo a buscar y lo primero que hago (porque no me creo lo que dice Intellisense) es mirar el visor de clases y objetos de Visual Studio 2008 y mirar allí la clase System.Windows.Forms.CheckedListBox.

Allí sí encuentro varias propiedades ocultas,… entre ellas la propiedad DataSource, DisplayMember y ValueMember, así que sí, están ahí.

Además, es lógico pensar que deberían estar ya que el control CheckedListBox hereda de ListControl (que implementa los miembros comunes de los controles ListBox y ComboBox), y que a su vez hereda de Control. Las propiedades DataSource, DisplayMember y ValueMember están por ahí gracias a la herencia para deleite y disfrute nuestro.

Así que… aunque no aparezca en el Intellisense… que no decaiga la fiesta… porqué… ¿podemos usarlo?.

Pues sí, así es.

Y para muestra un botón.

Arranco con una aplicación Windows escrita en C# y una clase que no merece mayor consideración que el propio código:

 

public struct Product
{

    public string Code;
    
public string Name;

    public Product(string code, string name)
    {
        
this.Code = code;
        
this.Name = name;
    }

    public override string ToString()
    {
        
return this.Code + «t» + this.Name;
    }

}

 

En el formulario he insetado un control Button y un control CheckedListBox.

Dentro del formulario, he agregado el siguiente código en lo que al evento MainForm_Load se refiere:

 

private void MainForm_Load(object sender, EventArgs e)
{
    
Product product;
    
List<Product> productsCollection = new List<Product>();
    product = 
new Product();
    product.Code = 
«A01»;
    product.Name = 
«Naranjas»;
    productsCollection.Add(product);
    product = 
new Product();
    product.Code = 
«A02»;
    product.Name = 
«Peras»;
    productsCollection.Add(product);
    
this.checkedListBox1.DataSource = productsCollection.ToList();
    
this.checkedListBox1.DisplayMember = «Code»;
    
this.checkedListBox1.ValueMember = «»;
}

 

Finalmente y en el control Button, he establecido un sencillo mecanismo para extraer aquellos elementos que hemos seleccionado:

 

private void button1_Click(object sender, EventArgs e)
{
    
foreach (var item in this.checkedListBox1.CheckedItems)
    {
        
Product product = (Product)(item);
        
MessageBox.Show(product.Code + Environment.NewLine + product.Name);
    }
}

 

Como podemos ver en este ejemplo, el control CheckedListBox no nos muestra en Visual Studio y «gracias» al Intellisense las propiedades DataSource, DisplayMember y ValueMember, sin embargo, están ahí y las podemos utilizar perfectamente.

Aún y así, hubiera sido un detalle que el control tuviera la posibilidad de chequear o deschequear una fila de datos del control a partir de un valor (true/false) pasado como parámetro, pero eso es motivo de otro estudio diferente que no viene al caso.

Comments

7 Responsesso far

  1. anonymous dice:
    26 octubre, 2009 a las 10:09 pm

    Hola

    Ya que lo mencionas, a mi me ha pasado varias veces en otros controles y con otras propiedades, creo que es una pulga del intellisence.

    Y eso que dice, si se puede hacer,yo lo he hecho manualmente, seria algo mas o menos asi:

    FrmDistri.ListaPedidos.Items.Add(dgvRow.Cells(0).Value, True)

    Supongo que si el dataset, trae un campo bit, el lo va a marcar.

    Saludos

    Felipe

    Responder
  2. anonymous dice:
    27 octubre, 2009 a las 9:20 am

    El motivo para que no aparezca la propiedad en el IntelliSense es que esta decorada con el atributo EditorBrowsableAttribute

    «EditorBrowsableAttribute is a hint to a designer indicating whether a property or method is to be displayed. You can use this type in a visual designer or text editor to determine what is visible to the user. For example, the IntelliSense engine in Visual Studio uses this attribute to determine whether to show a property or method.»

    Responder
  3. jorge dice:
    27 octubre, 2009 a las 10:25 am

    Muchas gracias David.

    Justamente por eso no se ve en el intellisense… por tener EditorBrowsable deshabilitada.

    He ido a Reflector (sé que debería haberlo hecho antes) y allí he encontrado esto que comentas:

    [EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
    public object DataSource
    {
    get
    {
    return base.DataSource;
    }
    set
    {
    base.DataSource = value;
    }
    }

    Muchas gracias por la aclaración.

    Ahora sabemos porqué no aparece en el Intellisense… sin embargo… lo bueno es que está ahí.

    Un saludo y a ver si en el próximo CodeCamp nos vemos (aunque para este pasado según he visto había obligaciones mayores). 🙂

    Jorge

    Responder
  4. jorge dice:
    27 octubre, 2009 a las 10:27 am

    @Felipe,

    eso demuestra y más con lo comentado por David, que a veces antes de desesperarnos podemos ir a herramientas tipo Reflector o el visor de objetos de VS y buscar los detalles.

    Hay muchos y a veces nos pueden incluso salvar la vida. 🙂

    Gracias por comentar.

    Jorge

    Responder
  5. anonymous dice:
    27 octubre, 2009 a las 7:09 pm

    Hecho!! 🙂

    Saludos

    Responder
  6. anonymous dice:
    4 noviembre, 2009 a las 8:23 pm

    tio, disculpa la ignorancia, pero donde veo esto? [EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]

    Responder
  7. jorge dice:
    8 noviembre, 2009 a las 12:31 pm

    @jaime.
    Hola Jaime, gracias por preguntar.
    Esto yo lo veo con Reflector. Supongo que conocerás la herramienta (gratuita). La encontrarás en este enlace (por si no la tienes):

    http://www.red-gate.com/products/reflector/

    Responder

Deja un comentario Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

← Previous Post Next Post →

Jorge Serrano

MVP Reconnect


¡Subscríbete a mi canal!
YouTube

Donaciones
Donation

Entradas recientes

  • Go – Arrays
  • Go – Operators
  • Go – Constants
  • Go – Tipos de Datos
  • Go – Variables
  • Hello Go-rld!
  • Introducción a Go o Golang
  • JSON Patch en ASP.NET Core 5 Web API
  • Null Checking en C#
  • ¿Porqué mi página web por defecto de ASP.NET Core no se vé en mi Azure Web App y me da un 404?

Categorías

  • .NET 5
  • .NET Core
  • .NET Core 3.0
  • .NET Core 3.1
  • .NET Framework 2.0
  • .NET Framework 3.0
  • .NET Framework 3.5
  • .NET Framework 4.0
  • .NET Framework 4.5
  • .NET Framework 4.6
  • .NET Framework 4.7
  • .NET Framework 4.8
  • .NET Standard 2.0
  • .NET Standard 2.1
  • AMQP
  • Android
  • Angular
  • API REST
  • Apple
  • Apple iOS
  • Apple macOs
  • Arquitectura
  • ASP.NET
  • ASP.NET Core
  • ASP.NET Core 3
  • ASP.NET Core 5
  • AWS
  • Azure App Service
  • Azure Application Insights
  • Azure Cosmos DB
  • Azure Database Migration Service
  • Azure Databricks
  • Azure DevOps
  • Azure Event Grid
  • Azure Functions
  • Azure IoT
  • Azure Portal
  • Azure PowerShell
  • Azure Queue Storage
  • Azure SQL
  • Azure Storage
  • Azure Virtual Datacenter
  • Azure WebApps
  • Big Data
  • Bing
  • Blazor
  • Blog
  • Bots
  • C#
  • C# 7.0
  • C# 7.1
  • C# 7.2
  • C# 7.3
  • C# 8.0
  • C# 9.0
  • Channel 9
  • Codeplex
  • Codespaces
  • Containers
  • Debugging
  • DevOps
  • Docker
  • Electron
  • Entity Framework
  • Entity Framework Core
  • Entity Framework Core 3.0
  • Entity Framework Core 5
  • Eventos
  • F#
  • FaaS
  • FeatureFlags
  • FeatureToggles
  • Feeds
  • Fluent Assertions
  • General
  • GIMP
  • Git
  • GitHub
  • Go
  • Google
  • Google Analytics
  • Gradle
  • gRPC
  • GSA
  • Historia de la Informática
  • HoloLens
  • HtmlAgilityPack
  • IdentityServer4
  • Inkscape
  • Ionic
  • iOS
  • IoT
  • Java
  • JavaScript
  • JDBC
  • JSON
  • Kubernetes
  • Lenguajes de Programación
  • Libros y Cursos
  • LINQ
  • Linux
  • LiteDB
  • Machine Learning
  • macOS
  • Microservices
  • Microsoft
  • Microsoft .NET Framework 4.5
  • Microsoft 365
  • Microsoft Azure
  • Microsoft Build
  • Microsoft Ignite
  • Microsoft Learn
  • Microsoft Orleans
  • Microsoft Surface Go
  • Microsoft Teams
  • ML.NET
  • MQTT
  • MRO
  • MS-DOS
  • MsCoders Madrid
  • MVP
  • NancyFx
  • Node.js
  • NoSQL
  • NuGet
  • NUnit
  • OData
  • ODP.NET Core
  • Office 2007
  • Office 2010
  • Office 2013
  • Office 2016
  • Office 2019
  • Office 365
  • Open Source
  • Open XML SDK
  • Opinión
  • Orchard CMS
  • OT
  • PaaS
  • Patterns
  • PdfSharpCore
  • Performance
  • PHP
  • Postman
  • Power BI
  • PowerShell
  • PowerShell Core
  • Productividad
  • Project Server 2019
  • R
  • Rendimiento
  • Scala
  • Scraper
  • Security
  • Serverless
  • Service Fabric
  • SharePoint Server 2019
  • SignalR
  • Sin categoría
  • Sistemas Distribuidos
  • Skype
  • Skype for Business Server 2019
  • Small Basic Online
  • SQL Server 2005
  • SQL Server 2008
  • SQL Server 2012
  • SQL Server 2014
  • SQL Server 2016
  • SQL Server 2017
  • SQL Server 2019
  • STOMP
  • Swagger
  • Testing
  • TFS 2017
  • TFS 2018
  • Tools
  • TypeScript
  • Unity
  • UWP
  • UX
  • Visio
  • Visual Basic
  • Visual Studio 2010
  • Visual Studio 2012
  • Visual Studio 2013
  • Visual Studio 2015
  • Visual Studio 2017
  • Visual Studio 2017 for Mac
  • Visual Studio 2019
  • Visual Studio 2019 for Mac
  • Visual Studio App Center
  • Visual Studio Code
  • Visual Studio IntelliCode
  • Visual Studio Live Share
  • Visual Studio Live Share Audio
  • Visual Studio Online
  • VS Anywhere
  • Vue.js
  • Web API
  • WebAssembly
  • WinDbg
  • Windows
  • Windows 10
  • Windows Compatibility Pack
  • Windows Phone 10
  • Windows Phone 7
  • Windows Phone 8
  • Windows Server 2008
  • Windows Server 2012
  • Windows Server 2016
  • Windows Server 2019
  • Windows Service
  • WinForms
  • WinUI
  • WPF
  • Xamarin
  • Xbox
  • Xcode
  • Xiaomi Mi Band 2
  • xUnit
  • YAML

Archivos

  • enero 2021
  • diciembre 2020
  • noviembre 2020
  • octubre 2020
  • septiembre 2020
  • agosto 2020
  • julio 2020
  • junio 2020
  • mayo 2020
  • abril 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • diciembre 2019
  • noviembre 2019
  • octubre 2019
  • septiembre 2019
  • agosto 2019
  • julio 2019
  • junio 2019
  • mayo 2019
  • abril 2019
  • marzo 2019
  • febrero 2019
  • enero 2019
  • diciembre 2018
  • noviembre 2018
  • octubre 2018
  • septiembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • abril 2018
  • marzo 2018
  • febrero 2018
  • enero 2018
  • diciembre 2017
  • noviembre 2017
  • octubre 2017
  • septiembre 2017
  • agosto 2017
  • julio 2017
  • junio 2017
  • febrero 2015
  • octubre 2014
  • junio 2014
  • marzo 2014
  • febrero 2014
  • enero 2014
  • diciembre 2013
  • septiembre 2013
  • agosto 2013
  • julio 2013
  • junio 2013
  • abril 2013
  • febrero 2013
  • enero 2013
  • diciembre 2012
  • noviembre 2012
  • septiembre 2012
  • agosto 2012
  • junio 2012
  • mayo 2012
  • abril 2012
  • marzo 2012
  • febrero 2012
  • enero 2012
  • diciembre 2011
  • noviembre 2011
  • octubre 2011
  • septiembre 2011
  • agosto 2011
  • julio 2011
  • junio 2011
  • mayo 2011
  • abril 2011
  • marzo 2011
  • enero 2011
  • diciembre 2010
  • noviembre 2010
  • octubre 2010
  • septiembre 2010
  • agosto 2010
  • julio 2010
  • junio 2010
  • mayo 2010
  • abril 2010
  • marzo 2010
  • febrero 2010
  • enero 2010
  • diciembre 2009
  • noviembre 2009
  • octubre 2009
  • septiembre 2009
  • agosto 2009
  • julio 2009
  • junio 2009
  • mayo 2009
  • abril 2009
  • marzo 2009
  • febrero 2009
  • enero 2009
  • diciembre 2008
  • noviembre 2008
  • octubre 2008
  • septiembre 2008
  • agosto 2008
  • julio 2008
  • junio 2008
  • mayo 2008
  • abril 2008
  • marzo 2008
  • febrero 2008
  • enero 2008
  • diciembre 2007
  • noviembre 2007
  • octubre 2007
  • septiembre 2007
  • agosto 2007
  • julio 2007
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007
  • febrero 2007
  • enero 2007
  • diciembre 2006
  • noviembre 2006
  • octubre 2006
  • septiembre 2006
  • agosto 2006
  • julio 2006
  • junio 2006
  • mayo 2006
About This Site

A cras tincidunt, ut tellus et. Gravida scel ipsum sed iaculis, nunc non nam. Placerat sed phase llus, purus purus elit.

Archives Widget
  • January 2010
  • December 2009
  • November 2009
  • October 2009
Categories
  • Entertainment
  • Technology
  • Sports & Recreation
  • Jobs & Lifestyle
Search
  • twitter

Powered by WordPress  |  Business Directory by InkThemes.

This site uses cookies: Find out more.