简体   繁体   English

如何通过C#.Net中的ComboBox检索第一个索引的值?

[英]How to retrieve the value of first index through ComboBox in C#.Net?

I kept getting "FormatException was unhandled by user Code" Following is the Code: 我一直得到“FormatException未被用户代码处理”以下是代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Eventmanagement
{
    public partial class Registration : Form
    {
        SqlConnection aConnection;
        string firstname= string.Empty; 
        string lastname= string.Empty;
        int aid;
        string date = DateTime.Now.ToShortDateString();
        SqlDataAdapter da = new SqlDataAdapter();
        DataTable dta;


        public Registration(string fname, string lname, int attID)
        {
            this.firstname = fname;
            this.lastname = lname;
            this.aid = attID;
            InitializeComponent();
        }
        //--------------------------------------------//

        private void Registration_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'insertEventDataSet.Events' table. You can move, or remove it, as needed.

            populateEventSalesPersonList();
            populateEventNameIdTypeList();

            //+++++++++++++++++++++++++++++++++++++++++++//
            txtSalesTaxRate_Registration.Text = Convert.ToString( SalesTaxRate());
            txtRegistrationID_Registration.Text = regID().ToString();
            //+++++++++++++++++++++++++++++++++++++++++++//

            //+++++++++++++++++++++++++++++++++++++++++++//
            txtAttendee_Registration.Text = (this.firstname+" "+this.lastname);
            txtRegistrationDate_Registration.Text = date.ToString();


        }

        //--------------------------------------------//

        public string getConnectionString()
        {
            try
            {
                string sConnection = "";

                // Get the mapped configuration file.
                System.Configuration.ConnectionStringSettingsCollection ConnSettings = ConfigurationManager.ConnectionStrings;
                sConnection = ConnSettings["DBConnectionString"].ToString();

                return sConnection;


            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return "";
            }
        }



        //--------------------------------------------//
        public void populateEventNameIdTypeList()
        {
            try
            {
                cmbEvent_Registration.DataSource = getDataTable4();
                //----------------------------
                cmbEvent_Registration.ValueMember = "EventID";
                cmbEvent_Registration.DisplayMember = "EventName";




            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }


        }


        //--------------------------------------------//

        public void populateEventSalesPersonList()
        {
             try
            {

                cmbSalesPerson_Registration.DataSource = getDataTable5();
                cmbSalesPerson_Registration.ValueMember = "EmployeeID";
                cmbSalesPerson_Registration.DisplayMember = "SalesPerson";

            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }

        //-------------------------------------------//

        public void populateFeeScheduleByEventList()
        {

            try
            {

                cmbFeeSchedule_Registration.DataSource = getDataTable6(); 
                cmbFeeSchedule_Registration.ValueMember = "FeeScheduleID";
                cmbFeeSchedule_Registration.DisplayMember = "Fee";




                //--------------------------------------------------//

                //saleTax();
                //txtSalesTax_Registration.Text = Convert.ToString(saleTax());
                //txtTotalCharges_Registration.Text = Convert.ToString(totalCharges());
                //txtAmountDue_Registration.Text = Convert.ToString(amountDue());

                //--------------------------------------------------//
                }

            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }

        }

        //------------------------------------------//

        //------------------------------------------//



        private void btnclose_Registration_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnInsert_Registration_Click(object sender, EventArgs e)
        {
            try
            {
                aConnection = new SqlConnection(getConnectionString());
                aConnection.Open();

                //Calling the Stored Procedure

                da.InsertCommand = new SqlCommand("RegistrationInsert", aConnection);
                da.InsertCommand.CommandType = CommandType.StoredProcedure;

                //da.InsertCommand.Parameters.Add(@"RegistrationID", SqlDbType.Int).Value =  Convert.ToInt16( txtRegistrationID_Registration.Text);
                da.InsertCommand.Parameters.Add(@"AttendeeID", SqlDbType.Int).Value =  Convert.ToInt16( aid); 
                da.InsertCommand.Parameters.Add(@"RegistrationDate", SqlDbType.SmallDateTime).Value = Convert.ToDateTime(txtRegistrationDate_Registration.Text=date.ToString());
                da.InsertCommand.Parameters.Add(@"PurchaseOrderNumber", SqlDbType.VarChar).Value = txtPoNumber_Registration.Text; 
               // da.InsertCommand.Parameters.Add(@"SalesPerson", SqlDbType.Int).Value = Convert.ToInt64(cmbSalesPerson_Registration.SelectedValue.ToString());
                da.InsertCommand.Parameters.Add(@"EventID", SqlDbType.Int).Value = cmbEvent_Registration.SelectedValue.ToString();
                da.InsertCommand.Parameters.Add(@"FeeScheduleID", SqlDbType.Int).Value = cmbFeeSchedule_Registration.SelectedValue.ToString();
                da.InsertCommand.Parameters.Add(@"RegistrationFee", SqlDbType.Money).Value = txtRegistrationFee_Registration.Text;
                da.InsertCommand.Parameters.Add(@"EmployeeID", SqlDbType.Int).Value = Convert.ToInt16(cmbSalesPerson_Registration.SelectedValue.ToString());
                da.InsertCommand.Parameters.Add(@"SalesTaxRate", SqlDbType.Float).Value = txtSalesTaxRate_Registration.Text;
                //da.InsertCommand.Parameters.Add(@"EndTime", SqlDbType.SmallDateTime).Value = Convert.ToDateTime(txtEndTime.Text.ToString());
                da.InsertCommand.ExecuteNonQuery();


                MessageBox.Show("Inserted successfully!!!");

                aConnection.Close();
                da.InsertCommand.Dispose();

            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }


        }

        //-------------------------------------------//

        public DataTable getDataTable4()
        {
            try
            {
                dta = new DataTable();
                aConnection = new SqlConnection(getConnectionString());
                aConnection.Open();
                da = new SqlDataAdapter();
                da.SelectCommand = new SqlCommand("EventsSelectAll", aConnection);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                da.SelectCommand.ExecuteNonQuery();

                da.Fill(dta);
                aConnection.Close();
                return dta;

            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return null;
            }
        }
        public DataTable getDataTable5()
        {
            try
            {
                dta = new DataTable();
                aConnection = new SqlConnection(getConnectionString());
                aConnection.Open();
                da = new SqlDataAdapter();
                da.SelectCommand = new SqlCommand("sp_RegistrationSalesPerson", aConnection);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                da.SelectCommand.ExecuteNonQuery();
                dta.Clear();
                da.Fill(dta);
                aConnection.Close();
                return dta;

            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return null;
            }
        }
        public DataTable getDataTable6()
        {
            try
            {
                dta = new DataTable();
                da = new SqlDataAdapter();
                aConnection = new SqlConnection(getConnectionString());

                aConnection.Open();

                da.SelectCommand = new SqlCommand("sp_FeeScheduleSelectAllByEventID", aConnection);
                da.SelectCommand.Parameters.Add("EventID", SqlDbType.Int).Value = Convert.ToInt32(cmbEvent_Registration.SelectedValue.ToString());
                da.SelectCommand.CommandType = CommandType.StoredProcedure;


                da.SelectCommand.ExecuteNonQuery();
                da.Fill(dta);
                aConnection.Close();
                return dta;
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return null;
            }


        }



        private void cmbEvent_Registration_SelectedIndexChanged(object sender, EventArgs e)
        {
                populateFeeScheduleByEventList();

                txtRemainingSeats_Registration.Text = Convert.ToString(spaces());
        }




        public double saleTax()
        {                               
            double regFee = Convert.ToDouble(cmbFeeSchedule_Registration.SelectedText);
            double sTR = Convert.ToDouble(SalesTaxRate());
            double sr = regFee * (sTR / 100);
            return sr;
        }
        public int totalRegisteredAttendees()
        {
            da = new SqlDataAdapter();
            aConnection = new SqlConnection(getConnectionString());
            da.SelectCommand = new SqlCommand("RegistrationSelectAllByEventID", aConnection);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            da.SelectCommand.Parameters.Add("EventID", SqlDbType.Int).Value = Convert.ToInt32(cmbEvent_Registration.SelectedValue.ToString());

            aConnection.Open();
            int val = (int)da.SelectCommand.ExecuteScalar();
            aConnection.Close();
            return val;
        }
        public int spaces()
        {
            da = new SqlDataAdapter();
            aConnection = new SqlConnection(getConnectionString());
            da.SelectCommand = new SqlCommand("EventsSelect", aConnection);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            da.SelectCommand.Parameters.Add("EventID", SqlDbType.Int).Value = Convert.ToInt32(cmbEvent_Registration.SelectedValue.ToString());
            aConnection.Open();

            int spaces = Convert.ToInt16(da.SelectCommand.ExecuteScalar());
            aConnection.Close();

            int value = totalRegisteredAttendees();
            int totalspaces = spaces - value;
            return totalspaces;

        }

        public double SalesTaxRate()
        {
            da = new SqlDataAdapter();
            aConnection = new SqlConnection(getConnectionString());
            da.SelectCommand = new SqlCommand("CompanyInfo", aConnection);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;

            aConnection.Open();
            double sale = Convert.ToDouble(da.SelectCommand.ExecuteScalar());
            aConnection.Close();
            return sale;
        }


        public double totalCharges()
        {
            double tc = Convert.ToDouble(txtRegistrationFee_Registration.Text) +  (saleTax());
            return tc;
        }
        public double amountDue()
        {
            double aD;
            if (txtTotalPaid_Registration.Text == string.Empty)
            {
                aD = Convert.ToDouble(txtTotalCharges_Registration.Text.ToString());
            }
            else
            {
                double a = Convert.ToDouble(txtTotalPaid_Registration.Text.ToString());
                 double b=    (Convert.ToDouble(txtTotalCharges_Registration.Text.ToString()));
                 aD = b-a;
            }
                return aD;
        }

        public int regID()
        {
            da = new SqlDataAdapter();
            aConnection = new SqlConnection(getConnectionString());
            da.SelectCommand = new SqlCommand("RegistrationID", aConnection);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;

            aConnection.Open();
            int id = ((int)da.SelectCommand.ExecuteScalar())+1;

            aConnection.Close();
            return id;  
        }

        private void cmbFeeSchedule_Registration_SelectedIndexChanged(object sender, EventArgs e)
        {
           saleTax();
        }

        //------------------------------------------//
    }
}

When I call SaleTax() Method in following 当我在下面调用SaleTax()方法时

private void cmbFeeSchedule_Registration_SelectedIndexChanged(object sender, EventArgs e)
        {
           saleTax();
        }

I get "FormatException was unhandled by user Code" Error I debugged the Code and find out that it is happening because cmbFeeSchedule_Registration is not selecting the first index, hence it is giving the error. 我得到“FormatException未被用户代码处理”错误我调试了代码并发现它正在发生,因为cmbFeeSchedule_Registration没有选择第一个索引,因此它给出了错误。 I am confused what to do? 我很困惑该怎么办? How I get around this Problem? 我如何解决这个问题?

Edit: Well I resolved the issue. 编辑:我解决了这个问题。 It was the problem of in ` public void populateFeeScheduleByEventList() { 这是`public void populateFeeScheduleByEventList(){的问题

        try
        {

            cmbFeeSchedule_Registration.DataSource = getDataTable6(); 
            cmbFeeSchedule_Registration.ValueMember = "FeeScheduleID";
            cmbFeeSchedule_Registration.DisplayMember = "Fee";
        catch (Exception err)
        {
            MessageBox.Show(err.Message);
        }

    }`  

When SaleTax() was called, pointer leaves the DisplayMember and ValueMember . SaleTax()时,指针离开DisplayMember and ValueMember Hence I readjusted the code little bit and placed cmbFeeSchedule_Registration.ValueMember = "FeeScheduleID"; 因此我稍微调整了一下代码并放置了cmbFeeSchedule_Registration.ValueMember = "FeeScheduleID"; cmbFeeSchedule_Registration.DisplayMember = "Fee"; before cmbFeeSchedule_Registration.DataSource = getDataTable6(); cmbFeeSchedule_Registration.DataSource = getDataTable6(); and it resolved the Problem. 它解决了问题。 :) :)

If it is required that index 0 be selected in your ComboBox then you need to do some basic checking. 如果需要在ComboBox中选择索引0,则需要进行一些基本检查。 In your SelectedIndexChanged EventHandler wire-up, you need to add: 在SelectedIndexChanged EventHandler连线中,您需要添加:

if (cmbFeeSchedule_Registration.SelectedIndex == 0) {
    salesTax();
}

Also if the user is able to change the text in the ComboBox, you are not doing any error handling to handle the FormatException that will be caused by Convert.ToDouble when trying to convert a non-double value that is not parsable. 此外,如果用户能够更改ComboBox中的文本,则在尝试转换不可解析的非double值时,您不会执行任何错误处理来处理由Convert.ToDouble引起的FormatException。

double regFee = Convert.ToDouble(cmbFeeSchedule_Registration.SelectedText);            
double sTR = Convert.ToDouble(SalesTaxRate());

Furthermore, you could actually use double.Parse or double.TryParse instead of ConvertTo, which seems more proper. 此外,您实际上可以使用double.Parsedouble.TryParse而不是ConvertTo,这似乎更合适。 On another note, if the user cannot edit the text in the ComboBox (say you have it set to DropDownList), you should use the SelectedObject or SelectedValue property instead of SelectedText depending if it is DataBound or not. 另一方面,如果用户无法编辑ComboBox中的文本(假设您将其设置为DropDownList),则应使用SelectedObject或SelectedValue属性而不是SelectedText,具体取决于它是否为DataBound。

Bottom line is you need to make sure you are checking that the correct index is selected before calling salesTax() or any operation that will potentially throw an exception, and do error checking to ensure that your values are what they should be. 最重要的是,您需要确保在调用salesTax()或任何可能引发异常的操作之前检查是否选择了正确的索引,并进行错误检查以确保您的值应该是它们应该是什么。 If regFee is anything but a double, because the correct index is not selected, ConvertTo will fail. 如果regFee不是double,则因为未选择正确的索引,ConvertTo将失败。 (Use double.Parse/TryParse instead, anyway) (反正使用double.Parse / TryParse)

A tip of advice when posting questions is to only post the affected segment of code, and provide a StackTrace when one is available. 发布问题时的建议提示是仅发布受影响的代码段,并在可用时提供StackTrace。 It's too difficult to navigate all of your code on here, and using a StackTrace it is easy to break down. 在这里导航所有代码太难了,使用StackTrace很容易分解。

你必须在表格中使selectedindex = 0

Just do this: 这样做:

if(((ComboBox)sender).SelectedIndex > -1) saleTax();

instead. 代替。 If you want to select the first item when the form loads, set SelectedIndex in the Load event. 如果要在表单加载时选择第一个项目,请在Load事件中设置SelectedIndex

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用c#.net Windows应用程序基于其他组合框的值填充datagridview组合框 - How to populate datagridview combobox based on the value of other combobox using c#.net windows application C#.NET ComboBox控件 - C#.NET ComboBox control 从c#.net中的数据库加载数据时如何将组合框值设置为null或为空 - How to set combobox value to null or empty while loading data to it from database in c#.net 如何基于选择ListView记录选择合适的组合框值? -C#.NET - How Can I Choose Appropriate ComboBox Value Based on Select ListView Record? - C#.NET 如何通过C#.net运行PowerCli - How to run PowerCli through C#.net 如何在c#.net的组合框中检索value-tem对的值? - how to retrieve the value of the value-tem pair in a combo box in c#.net? 如何使用C#.net从数据库中检索日期值并在HTML5输入类型“日期”中进行设置? - How to retrieve Date value from Database using C#.net and set in HTML5 input Type 'date'? C#.NET / Genesys-如何基于事件的ReferenceID检索某些值 - C#.NET/Genesys-How to retrieve certain value based on the event's ReferenceID 如何使用C#.NET Winform从SQL Server Compact数据库检索返回行值 - How to retrieve return row value from a SQL Server Compact database using C#.NET winform 如何使用c#.net将行索引用作数据集索引 - how to use row index as dataset index using c#.net
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM