0

我知道这是重复的问题。我尝试在重复问题中找到解决方案,但我失败了。

情况是我有 2 个组合框(Telerik Winforms),称为 ComboBranch 和 ComboPanel。当用户在 ComboBranch 中选择某个值时,ComboPanel 将显示不同的值。

所以这是代码

 private void tbDropBranch_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
    {
        dataPanel();
    }

    void dataPanel()
    {

        DataTable dtPanel = dataBinding._valuePanel(Convert.ToInt32(tbDropBranch.SelectedValue.ToString())); // Error in here
        tbDropPanel.DataSource = new BindingSource(dtPanel, null);
        tbDropPanel.DisplayMember = "panelName";
        tbDropPanel.ValueMember = "panelID";

    }

更新

如果我做 Event tbDropBranch_Leave 它的工作。但是为什么我在使用 tbDropBranch_SelectedIndexChanged 时出现错误?

 private void tbDropBranch_Leave(object sender, EventArgs e)
        {

            dataPanel();

        }

解决方案

我只是这样做:

void getIdBranch()
    {

        if ("System.Data.DataRowView" == tbDropBranch.SelectedValue.ToString())
        {
            return;
        }
        else
        {

            DataTable dtPanel = dataBinding._valuePanel(Convert.ToInt32(tbDropBranch.SelectedValue.ToString()));
            tbDropPanel.DataSource = new BindingSource(dtPanel, null);
            tbDropPanel.DisplayMember = "panelName";
            tbDropPanel.ValueMember = "panelID";
        }

    }

感谢那些帮助过的人.. :)

4

3 回答 3

1

我相信您收到异常是因为tbDropBranch.SelectedValue.ToString()无法转换为Integeror Int。我建议您先插入以下行,以确保在执行之前是否可以解析字符串以避免收到异常。如果您能提供您收到的确切例外情况,我们也将不胜感激。

   int x = 0;
   void dataPanel()
    {
        if (Int32.TryParse(tbDropBranch.SelectedValue.ToString(), out x)) //Check if tbDropBranch.SelectedValue.ToString() is a valid integer
        {
          DataTable dtPanel = dataBinding._valuePanel(Convert.ToInt32(tbDropBranch.SelectedValue.ToString())); // Error in here
          tbDropPanel.DataSource = new BindingSource(dtPanel, null);
          tbDropPanel.DisplayMember = "panelName";
          tbDropPanel.ValueMember = "panelID";
        }
    }

您始终可以尝试以下方法以根据其索引获取当前所选项目的确切值

if (ComboBranch.SelectedIndex != -1) // Execute the following only if there's a selected index
   {
        ComboBranch.Items[ComboBranch.SelectedIndex].ToString(); // Get the value of the selected index
   }

谢谢
我希望你觉得这有帮助:)

于 2012-10-24T16:44:47.933 回答
1

这是因为tbDropBranch.SelectedValue.ToString()返回System.Data.DataRowView. Convert.ToInt32无法将该值转换为 int。你需要传递一些别的东西。

于 2012-10-24T16:29:57.893 回答
0

我怀疑dataBinding._valuePanel使用 anInt32作为它的参数......也许它应该是一个int

dataBinding._valuePanel(int.Parse(tbDropBranch.SelectedValue.ToString()));
于 2012-10-24T16:28:02.287 回答