Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Info

Built with v10.

This solution demonstrates how to populate ComboBoxes using a data table.

Download the Solution Example:

Solution file: ComboBoxFromTable.dbsln
Database file:ComboBoxFromTable.db



Summary

This solution demonstrates how to populate ComboBoxes using a data table.


Technical Information

This example shows 2 options for populating a ComboBox.

Option 1: Adding the items in the CodeBehind

Option 2: Assigning a Tag to the ComboBox Items Source.

The easiest option is the second one, mapping tags directly to the Items Source, and to Selected Value, so no code is required. Open the example to see this configuration. 

When using the CodeBehind, follow these steps:

1) Get The ComboBox form the displaysFirst, you need to obtain control of the ComboBox on the display. This is achieved through the following lines:

Code Block
ComboBox cbxListCodes;

public void DisplayOpening()
{
    cbxListCodes = CurrentDisplay.GetControl("cbxListCodes") as ComboBox;
}

2) After that, you need to load your data table. In this example, we will retrieve the entire table asynchronously.

Code Block
// Selects the whole table
@Dataset.Table.Products.WhereCondition = "";
DataTable dt = await @Dataset.Table.Products.SelectCommandAsync();

3) Next, you can use a simple foreach loop to select which rows to add to the ComboBox, as shown in the code snippet below.

Code Block
// Inserts each row to the combobox
foreach (DataRow row in dt.Rows)
{
    cbxListCodes.Items.Add(row["ListCode"]);
}

4) Now, using an EventHandler, you can determine the value selected by the client from the ComboBox and update the other TextBoxes accordingly but this time, we'll use a different method to also retrieve the status of the SelectCommand, enabling easier troubleshooting if any issues occur. To achieve this, we'll create a new variable, "status," which will be passed by reference. This way, we'll change the SelectCommand method to SelectCommandWithStatusAsync.Finally, we retrieve the status value using a tag, allowing us to monitor the status directly in the property watch.

Code Block
cbxListCodes.SelectionChanged += new SelectionChangedEventHandler(codeChanged);

public void codeChanged(object sender, SelectionChangedEventArgs args)
{
if(cbxListCodes.SelectedValue == null)
return;

    // Selecting from the DB only the Item corresponding to the Code Selected in the ComboBox
    // Due to dealing with async methods that can't have multiple outputs
	// it's used a workaround by passing a reference to an int.
    // Therefore, we use this reference to be an input for our SelectCommandWithStatusAsync() method
    // and retrieve its value by getting the Value property.

TRef<int> status = new TRef<int>(); 
@Dataset.Table.Products.WhereCondition = "ListCode = " + cbxListCodes.SelectedValue.ToString();
if(@Dataset.Table.Products.SelectCommandWithStatusAsync(status).IsCompleted) 
	{
		@Tag.Status = status.Value;
	}  string selectValue = (sender as ComboBox).SelectedValue;
  // you code
}



Reference Information

→ See Displays (Desktop and Web) for more information.

→ See ComboBox Control for more information.

→ See Datasets Tables for more information.


In this section:

Page Tree
rootSolution Examples
spacesV10