RedRocket
RedRocket

Reputation: 1733

How do you get the Id of the item in CheckListBox

I have a checkListBox in my windows form application and binded with my database data with SQL. I populate a list of item according to what I select from my comboBox. If I select item 1 from my comboBox, it will display customers' name who is using this item. I want get customers' id according to what I check in my checkListBox.

Here is how I fill my comboBox

 private void fill_comboBox()
        {
            myConn = new SqlConnection("Server = localhost; Initial Catalog= dbName; Trusted_Connection = True");
            try
            {
                string query = "select itemId, itemName from item_detail";
                SqlDataAdapter da = new SqlDataAdapter();
                myConn.Open();
                DataTable dt = new DataTable();

                SqlCommand command = new SqlCommand(query, myConn);

                SqlDataReader reader = command.ExecuteReader();

                dt.Load(reader);

                DataRow dr;
                dr= dt.NewRow();
                dr.ItemArray = new object[] { 0, "<----------Select an item-------> " };
                dt.Rows.InsertAt(dr, 0);

                itemComboBox.DataSource = dr;
                itemComboBox.ValueMember = "itemId";
                itemComboBox.DisplayMember = "itemName";

                fill_customerCheckListBox();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

Here is how I fill my checkListBox

private void fill_customerCheckListBox()
{
    myConn = new SqlConnection("Server = localhost; Initial Catalog= dbName; Trusted_Connection = True");

    try
    {
        myConn.Open();

        DataSet myDataSet = new DataSet();
        myDataSet.CaseSensitive = true;

        string commandString = "select fullName from[customer_detail] as cd LEFT JOIN[item_customer] as ic ON ic.customerId= cd.customerI WHERE ic.itemId= '" + itemCombBox.SelectedValue + "' ";

        myCommand = new SqlCommand();

        myCommand.Connection = myConn;

        myCommand.CommandText = commandString;

        SqlDataAdapter myDataAdapter = new SqlDataAdapter();

        myDataAdapter.SelectCommand = myCommand;

        myDataAdapter.TableMappings.Add("Table", "customer_detail");

        myDataAdapter.Fill(myDataSet);

        DataTable myDataTable = myDataSet.Tables[0];

        customerCB.Items.Clear();

        string s = "Select All Customer";

        customer.Items.Add(s);

        foreach (DataRow dataRow in myDataTable.Rows)
        {

            customerCB.Items.Add(dataRow["fullName"]);
        }

    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

I have a praremter for loop that trying to loop through every checked item from my customerCB, but this isn't working. When I am in my debug mode, the code DataRow row = (itemChecked as DataRowView).Row; is causing an exception

Object reference is not set to an instance of an object.

I have no idea how to fix this. Help will be appreciated, thanks

 string parameterList = ""; 



foreach (object itemChecked in customerCB.CheckedItems) 
{ 
     DataRow row = (itemChecked as DataRowView).Row; 
     parameterList += (parameterList.Length == 0) ? row[0].ToString() : ", " + row[0].ToString();
}

Upvotes: 0

Views: 477

Answers (2)

Tummala Krishna Kishore
Tummala Krishna Kishore

Reputation: 8271

Try the Following way !!

foreach(object itemChecked in checkedListBox1.CheckedItems)
    {
         DataRowView castedItem = itemChecked as DataRowView;
         string fullName= castedItem["fullName"];

    }

(OR) You would need to cast or parse the items to their strongly typed equivalents, or use the System.Data.DataSetExtensions namespace to use the DataRowExtensions.Field method demonstrated below:

foreach (var item in checkedListBox1.CheckedItems)
{
    var row = (itemChecked as DataRowView).Row;
    int id = row.Field<int>("ID");
    string name = row.Field<string>("fullName");

}

Upvotes: 2

Daniel Efr&#233;n
Daniel Efr&#233;n

Reputation: 84

it seems than when you are populating your combobox your are entering dataRow["fullName"] therefore this cast DataRow row = (itemChecked as DataRowView).Row won't work as itemChecked only contains the value of fullName and not the row, try adding the dataRow instead.

Upvotes: 0

Related Questions