【问题标题】:ComboBox Input String format exception when DataGrid row selection is blank当 DataGrid 行选择为空白时,ComboBox 输入字符串格式异常
【发布时间】:2020-07-28 00:51:00
【问题描述】:

我有一个从 SQL Server 数据库填充的DataGrid,我有一个鼠标双击事件,它打开一个新窗口并填充TextboxesComboBoxes

我有一个小问题。如果所选行的名为“RTTYPE”的列是空白的,我将得到一个System.FormatException: Input string was not in a correct format,然后ComboBox 显示列表中的第一个值项。

如果所选行为空白,我希望 ComboBox 保持空白。请帮忙!

        private void dtGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {

        // User double clicks on DataGrid Row
        // Open new Window
        // Populate selected textboxes with selected datarow
        DataGrid gd = (DataGrid)sender;
        DataRowView row_selected = gd.SelectedItem as DataRowView;

        var windowToOpen = new Window1();

        if (gd != null)
        {
            // Textboxes
            windowToOpen.txt_RowRecrd.Text = row_selected["DSP_ID"].ToString();
            windowToOpen.txt_acctnumber.Text = row_selected["ACCOUNT"].ToString();
            windowToOpen.txt_analyst.Text = row_selected["TX_EMPLOYEE"].ToString();
            windowToOpen.txt_custname.Text = row_selected["CUST_NAME"].ToString();
            windowToOpen.txt_address.Text = row_selected["PREM_ADDR"].ToString();
            windowToOpen.txt_Status.Text = row_selected["Status"].ToString();
            windowToOpen.txt_opened.Text = row_selected["OPENED"].ToString();
            windowToOpen.txt_deadline.Text = row_selected["DEADLINE"].ToString();
            windowToOpen.txt_DaysOpen.Text = row_selected["DaysOpen"].ToString();
            windowToOpen.txt_DateResolved.Text = row_selected["DATERSLVD"].ToString();
            windowToOpen.txt_revcls.Text = row_selected["RateType"].ToString();
            windowToOpen.txt_WFMissuedBy.Text = row_selected["NM_USER"].ToString();
            windowToOpen.txt_firstreview.Text = row_selected["FR_DT_FIRSTREV"].ToString();
            windowToOpen.txt_Latestupdate.Text = row_selected["FR_TS_LATESTUPD"].ToString();
            windowToOpen.txt_reviewNotes.Text = row_selected["FR_CMMNT"].ToString();
            windowToOpen.txt_ResolutionNotes.Text = row_selected["COMMENT"].ToString();


            // ComboBoxes
            SqlConnection connection = new SqlConnection("Data Source=WINDOWS-B1AT5HC\\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;");

            try
            {
                SqlDataAdapter Status_data = new SqlDataAdapter("SELECT RPTID, ReportType FROM [hb_RptType]", connection);
                DataSet ds = new DataSet();
                Status_data.Fill(ds, "t");

                windowToOpen.cmb_UtilityRptTyp.ItemsSource = ds.Tables["t"].DefaultView;
                windowToOpen.cmb_UtilityRptTyp.DisplayMemberPath = "ReportType";
                windowToOpen.cmb_UtilityRptTyp.SelectedValuePath = "RPTID";
                windowToOpen.cmb_UtilityRptTyp.SelectedValue = row_selected["RPTTYPE"].ToString();

                // windowToOpen.cmb_UtilityRptTyp.SelectedIndex = 3; //  Convert.ToInt32( row_selected["RPTTYPE"].ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

            windowToOpen.Show();
        }
        else
        {
            return;
        }

    }

【问题讨论】:

    标签: c# sql sql-server combobox datagrid


    【解决方案1】:

    如果您为Selected ValueComboBox 选择null,则会引发异常。如果您的数据只是一个纯字符串,您可以使用SelectedItem 而不是SelectedValue。或者执行空检查:

    if(row_selected["RPTTYPE"] is string rateType) windowToOpen.cmb_UtilityRptTyp.SelectedValue = rateType;
    else UtilityRptTyp.SelectedIndex = -1;
    

    【讨论】:

    • 我的 ["RPTTYPE"] 列是Int,我用int 替换了string,现在我的ComboBox 是空白的,如果选择的行是null
    • SelectedValue 始终是一个字符串。因此,尽管您的 ["RPTTYPE"] 是 int,但 ComboBox 的 SelectedValue 仍然是一个字符串。因此,您应该在将 rateType 分配给 SelectedValue 时将其转换为字符串,或者您可以尝试将我的代码保留为字符串,而不是 int。例如,is string 会将其转换为字符串“1”并将其分配给 SelectedValue。
    • 我不确定我是否明白我需要做什么。当我使用您提供的代码时,我仍然会收到一条异常消息,并且列表上的 1 就像以前一样出现。我希望ComboBox 保持空白。
    • 这可能很有用,如果你写,你会得到什么例外。您应该将您的 row_selected["RPTTYPE"] 转换为字符串,或者,如果您使用整数填充 ComboBox,您可以尝试使用 SelectedItem 而不是 SelectedValue。 ComboBox 有 3 个选项可供选择。 SelectedIndex 是 int 并且未选择的 ComboBox 是 SelectedIndex = -1。 SelectedItem 是任何类型的对象,未选中的 ComboBox 是 SelectedItem = null(但您可能需要将 ComboBox.Text 设置为“”)。 SelectedValue 是一个字符串,您不能取消选择它。请记住这一点,您会找到解决问题的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2020-08-12
    • 1970-01-01
    • 2013-06-10
    相关资源
    最近更新 更多