如何处理在C#中动态更改的组合框selectedIndex [英] how to handle combobox selectedindexchanged dynamically in c#
问题描述
我的要求是...如果我在combobox1中选择spme值,则必须在cmbbox2中显示combobox1的相关值
我尝试使用此代码不起作用
对于cmbbox1
my requirement is ...if i select spme value in combobox1 the related values of combobox1 have to display in cmbbox2
i tried with this code its not working
for cmbbox1
private void fillModule()
{
DatasetForm = glbObj.srv.ViewDataSRV(clsGetViewXmlData.GetViewXMLData(gInfo.SchemaName, GlobalSP.FormInsert.Usp_FormInsert_SelectModule.ToString(), glbObj.inputMasKey));
DataTable Dt = DatasetForm.Tables[0];
if (Dt.Rows.Count > 0)
{
cmbmoduleid.DataSource = Dt;
cmbmoduleid.DisplayMember = "Module_Name"; //colum you want to show in comboBox
cmbmoduleid.ValueMember = "Module_Id";
}
}
对于cmb2,我已经编写了此代码
for cmb2 i''ve written this code
private void cmbmoduleid_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbmoduleid.SelectedIndex > -1 && cmbmoduleid.Text == "")
{
//DataRow selectedDataRow = ((DataRowView)cmbmoduleid.SelectedItem).Row;
if (cmbmoduleid.SelectedText != "")
{
MaskId = Convert.ToInt32(cmbmoduleid.SelectedText);
DatasetForm = glbObj.srv.ViewDataSRV(clsGetViewXmlData.GetViewXMLData(gInfo.SchemaName, GlobalSP.FormInsert.Usp_FormInsert_SelectSubModule.ToString(), MaskId));
DataTable Dt = DatasetForm.Tables[0];
//cmbmoduleid.DataSource = new BindingSource(ImpecApplication.Cust.Reports.Global.GLB_FORMS, null);
cmbsubmoduleid.DataSource = Dt;
cmbsubmoduleid.DisplayMember = "SubModule_Name"; //colum you want to show in comboBox
cmbsubmoduleid.ValueMember = "SubModule_ID";
}
}
}
推荐答案
这种条件会实现吗?
Will this condition ever come true?
if (cmbmoduleid.SelectedIndex > -1 && cmbmoduleid.Text == "")
{.....}
我认为问题就在这里.
请确保以下代码不会引发类型强制转换异常
I think the problem is here.
Please make sure the below code will not throw type cast exception
MaskId = Convert.ToInt32(cmbmoduleid.SelectedText);
注意:如果仅包含一个数据表,为什么要使用数据集.请改用datatable.这将提高性能.
问候
Sebastian
NB: Why should we use dataset if it contains only one datatable. Use datatable instead. That will boost performance.
Regards
Sebastian
您需要获取SelectedValue
而不是SelectedText
you need to getSelectedValue
notSelectedText
MaskId = Convert.ToInt32(cmbmoduleid.SelectedValue);
而且您最好使用int.TryParse
and also you better use int.TryParse
private void cmbmoduleid_SelectedIndexChanged(object sender, EventArgs e)
{
var mskId;
if(int.TryParse(cmbmoduleid.SelectedValue, out mskId))
{
DatasetForm = glbObj.srv.ViewDataSRV(clsGetViewXmlData.GetViewXMLData(gInfo.SchemaName, GlobalSP.FormInsert.Usp_FormInsert_SelectSubModule.ToString(), mskId));
// rest of the code
}
}
按条件放置....
if (cmbmoduleid.SelectedIndex > -1 )
{.....}
以下条件是错误的....
following condition is wrong ....
if (cmbmoduleid.SelectedIndex > -1 && cmbmoduleid.Text == "")
{
这篇关于如何处理在C#中动态更改的组合框selectedIndex的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!