Search code examples
c#winformssqldatareadercheckedlistbox

How can I list table columns (returned through an SQL query) as items in a CheckedListBox?


If I have the following table:

 canAssign 
------------
     1       

Is there a way to add the column header text (e.g., canAssign, etc.) to the CheckedListBox as the labels that a user can check?

All answers I've found list the value as the labels, like this:

☐ 1

Instead of this:

☐ canAssign

For Example Only, If I'm using the following to list whatever value is in the canAssign column, how could I change this to list the 'canAssign' column header text?

string myString = "SELECT canAssign FROM Permissions";
using (SqlConnection myConn = new SqlConnection(globalConnectionString)) 
{
    try {
        myConn.Open();
        using (SqlCommand myComm = new SqlCommand(myString, myConn)) 
        {
            SqlDataReader myReader = myComm.ExecuteReader();
            while (myReader.Read()) {
                checkedListBox1.Items.Add(myReader["canAssign"]);
            }
        }
    } catch (Exception ex) {
        MessageBox.Show(ex.Message);
    }
}


Solution

  • Assuming the SQL query in your code snippet is to get the permissions of a specific user and display them in a CheckedListBox using the same fields names from the database.

    If that sounds right, read the entry, loop to get the fields names and values through the SqlDataReader.GetName and SqlDataReader.GetBoolean methods respectively.

    //For example...
    var myString = "SELECT * FROM Permissions WHERE UserId = ....";
    
    try
    {
        using (SqlConnection myConn = new SqlConnection(globalConnectionString))
        using (SqlCommand myComm = new SqlCommand(myString, myConn))
        {
            myConn.Open();
    
            using (var myReader = myComm.ExecuteReader())
                if (myReader.Read())
                    for (var i = 0; i < myReader.FieldCount; i++)
                        checkedListBox1.Items.Add(myReader.GetName(i), myReader.GetBoolean(i));
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }