这是前台的xaml代码。
<Label Content="器件编号" HorizontalAlignment="Left" Margin="0,10,0,0" Width="80"/>
<TextBox Name="TBX_ComSID" HorizontalAlignment="Left" Margin="80,10,0,0" Width="100" TextChanged="TBX_ComSID_TextChanged"/>
<Label Content="一级类目" HorizontalAlignment="Left" Margin="200,10,0,0" Width="60"/>
<ComboBox Name="CBX_TypeOne" HorizontalAlignment="Left" SelectedIndex="0" Margin="260,10,0,0" Width="80" SelectionChanged="CBX_TypeOne_SelectionChanged" Loaded="CBX_TypeOne_Loaded"/>
<Label Content="二级类目" HorizontalAlignment="Left" Margin="350,10,0,0" Width="60"/>
<ComboBox Name="CBX_TypeTwo" HorizontalAlignment="Left" SelectedIndex="0" Margin="410,10,0,0" Width="80" SelectionChanged="CBX_TypeTwo_SelectionChanged" />
<Label Content="器件名称:" HorizontalAlignment="Left" Margin="520,10,0,0" Width="60"/>
<Label Style="{StaticResource LB_RedStar}" HorizontalAlignment="Left" Margin="565,10,0,0"/>
<uc:AutoFilteredComboBox x:Name="AFCB_ComponentName" SelectedIndex="0" HorizontalAlignment="Left" Margin="580,10,0,0" Width="160" SelectionChanged="AFCB_ComponentName_SelectionChanged"/>
<Label Content="器件规格" HorizontalAlignment="Left" Margin="780,10,0,0" Width="60"/>
<ComboBox Name="CBX_ComStandard" HorizontalAlignment="Left" Margin="840,10,0,0" Width="120"/>后台写的xaml.cs代码
#region 类目、名称、规格
//通过器件编号获取器件名称和规格
private void TBX_ComSID_TextChanged(object sender, TextChangedEventArgs e)
{
if (_ComponentDal.IsComExistedBySID(TBX_ComSID.Text.Trim()))
{
ComDirectory com = _ComponentDal.GetComBySID(TBX_ComSID.Text.Trim()).FirstOrDefault();
AFCB_ComponentName.SelectedValue = com.Name;
CBX_ComStandard.SelectedValue = com.Standard;
}
} //类目一
private void CBX_TypeOne_Loaded(object sender, RoutedEventArgs e)
{
List<string> typeOneList = new List<string>();
typeOneList.Add("全部");
typeOneList.AddRange(_ClassDal.GetClassNameByLevel(1));
CBX_TypeOne.ItemsSource = typeOneList; } // 类目一
private void CBX_TypeOne_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string typeOneName = CBX_TypeOne.SelectedItem.ToString().Trim();
if (typeOneName == "全部")
{//控制显示类目二
List<string> typeTwo = new List<string>();
typeTwo.Add("全部");
typeTwo.AddRange(_ClassDal.GetClassNameByLevel(2));
CBX_TypeTwo.ItemsSource = typeTwo; //控制显示器件名称
List<string> nameList = new List<string>();
nameList.Add("全部");
nameList.AddRange(_ComponentDal.GetNames());
AFCB_ComponentName.ItemsSource = nameList;
AFCB_ComponentName.SelectedIndex = 0;
}
else
{
List<string> typeTwoList = new List<string>();
typeTwoList.Add("全部");//通过器件的一级类目获取二级类目
typeTwoList.AddRange(_ClassDal.GetClassNameByBelongClassName(typeOneName));
CBX_TypeTwo.ItemsSource = typeTwoList;
CBX_TypeTwo.SelectedIndex = 0;//当前焦点为0,即没有选中任何项
string typeTwoName = CBX_TypeTwo.SelectedItem.ToString().Trim();
if (typeTwoName == "全部")
{
List<string> nameList = new List<string>();
nameList.Add("全部");//通过器件的一级类目获取器件名称
nameList.AddRange(_ComponentDal.GetNameByBelongClassName(typeOneName));
AFCB_ComponentName.ItemsSource = nameList;
AFCB_ComponentName.SelectedIndex = 0;
}
}
} //类目二
private void CBX_TypeTwo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
//数据源发生的变化
if (CBX_TypeOne.SelectedItem == null) return; //数据源发生的变化,所以要提前判断一下
if (CBX_TypeTwo.SelectedItem == null) return;
string typeOneName = CBX_TypeOne.SelectedItem.ToString().Trim();
string typeTwoName = CBX_TypeTwo.SelectedItem.ToString().Trim();
List<string> nameList = new List<string>();
nameList.Add("全部");
if ((typeTwoName == "全部") && (typeOneName != "全部"))
{
nameList.AddRange(_ComponentDal.GetNameByBelongClassName(typeOneName.ToString().Trim()));
AFCB_ComponentName.ItemsSource = nameList;
}
if ((typeOneName == "全部") && (typeTwoName == "全部"))
{
nameList.AddRange(_ComponentDal.GetNames());
AFCB_ComponentName.ItemsSource = nameList;
}
else if (typeTwoName != "全部")//“全部”需要单独判断,避免覆盖初始化。
{//通过类目二控制显示器件名称
nameList.AddRange(_ComponentDal.GetNameByClassName(typeTwoName));
AFCB_ComponentName.ItemsSource = nameList;
} AFCB_ComponentName.SelectedIndex = 0;
}
catch (Exception cla)
{
MessageBox.Show(cla.ToString());
}
}
//器件
private void AFCB_ComponentName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (AFCB_ComponentName.SelectedItem == null) return;
CBX_ComStandard.SelectedIndex = 0;
string name = AFCB_ComponentName.SelectedItem.ToString().Trim();
//通过器件名称来控制显示对应器件的规格
List<string> standardList = new List<string>();
standardList.Add("全部");
standardList.AddRange(_ComponentDal.GetComStandard(name));
CBX_ComStandard.ItemsSource = standardList;
}
#endregion
器件名称afcb 是一个过滤的combobox 我想请教下大神们,我这样写感觉有点乱,是可以实现功能。其中的if (CBX_TypeOne.SelectedItem == null) return; 这样我理解成数据源发生了变化会出错,希望大神耐心指导下,感激不尽
<Label Content="器件编号" HorizontalAlignment="Left" Margin="0,10,0,0" Width="80"/>
<TextBox Name="TBX_ComSID" HorizontalAlignment="Left" Margin="80,10,0,0" Width="100" TextChanged="TBX_ComSID_TextChanged"/>
<Label Content="一级类目" HorizontalAlignment="Left" Margin="200,10,0,0" Width="60"/>
<ComboBox Name="CBX_TypeOne" HorizontalAlignment="Left" SelectedIndex="0" Margin="260,10,0,0" Width="80" SelectionChanged="CBX_TypeOne_SelectionChanged" Loaded="CBX_TypeOne_Loaded"/>
<Label Content="二级类目" HorizontalAlignment="Left" Margin="350,10,0,0" Width="60"/>
<ComboBox Name="CBX_TypeTwo" HorizontalAlignment="Left" SelectedIndex="0" Margin="410,10,0,0" Width="80" SelectionChanged="CBX_TypeTwo_SelectionChanged" />
<Label Content="器件名称:" HorizontalAlignment="Left" Margin="520,10,0,0" Width="60"/>
<Label Style="{StaticResource LB_RedStar}" HorizontalAlignment="Left" Margin="565,10,0,0"/>
<uc:AutoFilteredComboBox x:Name="AFCB_ComponentName" SelectedIndex="0" HorizontalAlignment="Left" Margin="580,10,0,0" Width="160" SelectionChanged="AFCB_ComponentName_SelectionChanged"/>
<Label Content="器件规格" HorizontalAlignment="Left" Margin="780,10,0,0" Width="60"/>
<ComboBox Name="CBX_ComStandard" HorizontalAlignment="Left" Margin="840,10,0,0" Width="120"/>后台写的xaml.cs代码
#region 类目、名称、规格
//通过器件编号获取器件名称和规格
private void TBX_ComSID_TextChanged(object sender, TextChangedEventArgs e)
{
if (_ComponentDal.IsComExistedBySID(TBX_ComSID.Text.Trim()))
{
ComDirectory com = _ComponentDal.GetComBySID(TBX_ComSID.Text.Trim()).FirstOrDefault();
AFCB_ComponentName.SelectedValue = com.Name;
CBX_ComStandard.SelectedValue = com.Standard;
}
} //类目一
private void CBX_TypeOne_Loaded(object sender, RoutedEventArgs e)
{
List<string> typeOneList = new List<string>();
typeOneList.Add("全部");
typeOneList.AddRange(_ClassDal.GetClassNameByLevel(1));
CBX_TypeOne.ItemsSource = typeOneList; } // 类目一
private void CBX_TypeOne_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string typeOneName = CBX_TypeOne.SelectedItem.ToString().Trim();
if (typeOneName == "全部")
{//控制显示类目二
List<string> typeTwo = new List<string>();
typeTwo.Add("全部");
typeTwo.AddRange(_ClassDal.GetClassNameByLevel(2));
CBX_TypeTwo.ItemsSource = typeTwo; //控制显示器件名称
List<string> nameList = new List<string>();
nameList.Add("全部");
nameList.AddRange(_ComponentDal.GetNames());
AFCB_ComponentName.ItemsSource = nameList;
AFCB_ComponentName.SelectedIndex = 0;
}
else
{
List<string> typeTwoList = new List<string>();
typeTwoList.Add("全部");//通过器件的一级类目获取二级类目
typeTwoList.AddRange(_ClassDal.GetClassNameByBelongClassName(typeOneName));
CBX_TypeTwo.ItemsSource = typeTwoList;
CBX_TypeTwo.SelectedIndex = 0;//当前焦点为0,即没有选中任何项
string typeTwoName = CBX_TypeTwo.SelectedItem.ToString().Trim();
if (typeTwoName == "全部")
{
List<string> nameList = new List<string>();
nameList.Add("全部");//通过器件的一级类目获取器件名称
nameList.AddRange(_ComponentDal.GetNameByBelongClassName(typeOneName));
AFCB_ComponentName.ItemsSource = nameList;
AFCB_ComponentName.SelectedIndex = 0;
}
}
} //类目二
private void CBX_TypeTwo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
//数据源发生的变化
if (CBX_TypeOne.SelectedItem == null) return; //数据源发生的变化,所以要提前判断一下
if (CBX_TypeTwo.SelectedItem == null) return;
string typeOneName = CBX_TypeOne.SelectedItem.ToString().Trim();
string typeTwoName = CBX_TypeTwo.SelectedItem.ToString().Trim();
List<string> nameList = new List<string>();
nameList.Add("全部");
if ((typeTwoName == "全部") && (typeOneName != "全部"))
{
nameList.AddRange(_ComponentDal.GetNameByBelongClassName(typeOneName.ToString().Trim()));
AFCB_ComponentName.ItemsSource = nameList;
}
if ((typeOneName == "全部") && (typeTwoName == "全部"))
{
nameList.AddRange(_ComponentDal.GetNames());
AFCB_ComponentName.ItemsSource = nameList;
}
else if (typeTwoName != "全部")//“全部”需要单独判断,避免覆盖初始化。
{//通过类目二控制显示器件名称
nameList.AddRange(_ComponentDal.GetNameByClassName(typeTwoName));
AFCB_ComponentName.ItemsSource = nameList;
} AFCB_ComponentName.SelectedIndex = 0;
}
catch (Exception cla)
{
MessageBox.Show(cla.ToString());
}
}
//器件
private void AFCB_ComponentName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (AFCB_ComponentName.SelectedItem == null) return;
CBX_ComStandard.SelectedIndex = 0;
string name = AFCB_ComponentName.SelectedItem.ToString().Trim();
//通过器件名称来控制显示对应器件的规格
List<string> standardList = new List<string>();
standardList.Add("全部");
standardList.AddRange(_ComponentDal.GetComStandard(name));
CBX_ComStandard.ItemsSource = standardList;
}
#endregion
器件名称afcb 是一个过滤的combobox 我想请教下大神们,我这样写感觉有点乱,是可以实现功能。其中的if (CBX_TypeOne.SelectedItem == null) return; 这样我理解成数据源发生了变化会出错,希望大神耐心指导下,感激不尽
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货