This is a solution which assumes that you load all data at once, which will work fine as long as there aren't too many items - which there shouldn't be because otherwise it wouldn't be useful to let the user select with ComboBoxes.
It works by setting the RowFilter-Property of the DataView that is the DataSource for the "child"-ComboBox when you select a new entry of the "parent"-ComboBox.
Somewhere in your Form-startup (in the constructor or OnLoad(..)- or OnShown(..)-overrides):
brandComboBox.DataSource = brandTbl.DefaultView;
brandComboBox.ValueMember = "id";
brandComboBox.DisplayMember = "brandName";
typeComboBox.DataSource = typeTbl.DefaultView;
typeComboBox.ValueMember = "id";
typeComboBox.DisplayMember = "type";
BrandComboBoxSelectedIndexChanged(null, null);
brandComboBox.SelectedIndexChanged += BrandComboBoxSelectedIndexChanged;
As a method in your form:
private void BrandComboBoxSelectedIndexChanged(object sender, EventArgs e)
{
if (brandComboBox.ValueMember == "id")
((DataView)typeComboBox.DataSource).RowFilter = "brandId = " + brandComboBox.SelectedValue;
}