如何处理在C#中动态更改的组合框selectedIndex [英] how to handle combobox selectedindexchanged dynamically in c#

查看:82
本文介绍了如何处理在C#中动态更改的组合框selectedIndex的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的要求是...如果我在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 get SelectedValue not SelectedText

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆