У меня есть 3 таблицы:
1) Дом:
| ID_house | House_names | num_region |
---------------------------------------
| int | names | int |
num_region - внешний ключ, равный первичному ключу (Region.ID_region) в таблице регионов.
2) Регион:
| ID_region | Region_names | num_area |
---------------------------------------
| int | names | int |
num_area - внешний ключ, равный первичному ключу (Areas_InRegion.ID_area) в таблице Areas_InRegion.
3) Areas_InRegion:
| ID_area | Area_names |
------------------------
| int | names |
В форме у меня есть 3 комбинированных списка:
1) cmbHouse - для отображения названий домов из таблицы House.
2) cmbRegion - для отображения названий регионов из таблицы регионов.
3) cmbArea - для отображения названий областей в регионах из таблицы Areas_InRegion.
Я заполняю эти комбо как:
//cmbHouse
string cmbHouse_query = "SELECT * FROM House";
OleDbDataAdapter dahouse = new OleDbDataAdapter(cmbHouse_query, connection);
DataTable tablehouse = new DataTable();
dahouse.Fill(tablehouse);
cmbHouse.DataSource = tablehouse;
cmbHouse.DisplayMember = "House_names";
cmbHouse.ValueMember = "House.num_region";
cmbHouse.SelectedIndex = -1;
//cmbRegion
string cmbRegion_query = "SELECT * FROM Region";
OleDbDataAdapter daregion = new OleDbDataAdapter(cmbRegion_query, connection);
DataTable tableregion = new DataTable();
daregion.Fill(tableregion);
cmbRegion.DataSource = tableregion;
cmbRegion.DisplayMember = "Nameofregions";
cmbRegion.ValueMember = "Region.ID_region";
cmbRegion.SelectedIndex = -1;
//cmbArea
string cmbArea_query = "SELECT * FROM Areas_InRegion";
OleDbDataAdapter daArea = new OleDbDataAdapter(cmbArea_query, connection);
DataTable tablearea = new DataTable();
daArea.Fill(tablearea);
cmbArea.DataSource = tablearea;
cmbArea.DisplayMember = "Names_OfAreas";
cmbArea.ValueMember = "Areas_InRegion.ID_areas";
cmbArea.SelectedIndex = -1;
Я могу отфильтровать комбо cmbRegion по выделению в комбо cmbHouse:
private void cmbHouse_SelectionChangeCommitted(object sender, EventArgs e)
{
if (cmbHouse.SelectedIndex != null)
{
int num_region = Convert.ToInt32(cmbHouse.SelectedValue);
OleDbCommand com = new OleDbCommand();
com.CommandText = "SELECT * FROM Region WHERE Region.ID_region=" + num_region.ToString() + "";
com.Parameters.AddWithValue("House.num_region", typeof(int));
OleDbDataAdapter danum_region = new OleDbDataAdapter(com.CommandText, connection);
DataTable tablenum_region = new DataTable();
danum_region.Fill(tablenum_region);
cmbRegion.DataSource = tablenum_region;
cmbRegion.DisplayMember = "Nameofregions";
cmbRegion.ValueMember = "Region.ID_region";
cmbRegion.SelectedIndex = -1;
}
}
Но когда я пытаюсь отфильтровать код cmbRegion в фильтре комбо cmbArea, я получаю сообщение об ошибке «Не задано значение для одного или нескольких обязательных параметров». здесь:
private void cmbRegion_SelectionChangeCommitted(object sender, EventArgs e)
{
int num_area = Convert.ToInt32(cmbRegion.SelectedValue);
OleDbCommand com2 = new OleDbCommand();
com2.CommandText = "SELECT * FROM Areas_InRegion WHERE Region.num_arearegion=" + num_area.ToString() + "";
com2.Parameters.AddWithValue("Region.num_arearegion", typeof(int));
OleDbDataAdapter danum_area = new OleDbDataAdapter(com2.CommandText, connection);
DataTable tablenum_area = new DataTable();
danum_area.Fill(tablenum_area); //Error 'No value given for one or more required parameters.' appears here
cmbArea.DataSource = tablenum_area;
cmbArea.DisplayMember = "Names_OfAreas";
cmbArea.ValueMember = "Areas_InRegion.ID_areas";
cmbArea.SelectedIndex = -1;
}
Помогите мне решить эту проблему. Спасибо за помощь.