使用数据库中的DataTables在启动时填充程序而不获取System.IndexOutOfRange消息

时间:2013-05-16 11:48:48

标签: combobox dataset datatables initializecomponent

大家好,谢谢!任何和所有的帮助 我是编码和编程的绝对新手(4-5个月)

我正在使用visual studio 2012并在C#编码

我正在创建一个连接到SQL Server管理工作室中的数据库的Windows窗体应用程序

基本上我有两个组合框,需要在启动时填充db中的数据。

我创建了一个填充组合框的方法,程序100%正常工作 这些框在启动时填充,没有数据丢失,所有行都显示在组合框中,一切都完全按照它应该做的那样以及它应该做什么......

无论其!

每次我运行我的程序时,我都会收到此消息5次(因为生成消息的代码使用了5次)

System.IndexOutOfRangeException:There is no row at position 0
  at System.Data.RBTree1.GetNodeByIndex(Int32 userIndex)
  at System.Data.DataRowCollection.get_Item(Int32 index)

在实际程序启动并正常运行之前。 (它让我疯了!) 这是我所有的相关代码

以下代码来自我的实际形式 如你所见,我正在使用update_combobox();在initalizeComponent部分得到
它在启动时填充

        namespace DB_Program
       {
           public partial class Form1 : Form
           {

                DataClass dc = new DataClass();

                public Form1()
                {
                    Thread t = new Thread(new ThreadStart(SplashScreen));
                    t.Start();
                    Thread.Sleep(5000);
                    InitializeComponent();
                    t.Abort();
                    update_ComboBox();            
                  }

这是我的表单中的代码,使其成为可能

     private void update_ComboBox()
    {
        DataSet pList = dc.PListPop();

        cboBoxPList.DataSource = pList.Tables[0];
        cboBoxPList.DisplayMember = "PName";
        cboBoxPList.ValueMember = "PName";

        DataSet devList = dl.DevListPop();

        cboBoxDev.DataSource = devList.Tables[0];
        cboBoxDev.DisplayMember = "LName";
        cboBoxDev.ValueMember = "LName";

    }


         public String getDate(String pName)
        {
            String date = null;
            DataTable dTable = new DataTable();

            try
            {
                conn.Open();
                SqlDataAdapter sda = new SqlDataAdapter("SelPro", conn);
                sda.SelectCommand.CommandType = CommandType.StoredProcedure;
                sda.SelectCommand.Parameters.Add("@PName", SqlDbType.VarChar).Value = pName;
                sda.Fill(dTable);
                date = dTable.Rows[0]["StartDate"].ToString();

            }
            catch (Exception GSD)
            {

                string a = GSD.StackTrace.ToString();
                MessageBox.Show(GSD.ToString());
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }

            return date;
        }

根据我的消息,这些是生成消息的行,第一条消息与上面的代码直接相关

         date = dTable.Rows[0]["StartDate"].ToString();
         date = dTable.Rows[0]["PlannedEndDate"].ToString();
         FirstName = dTable.Rows[0]["FirstName"].ToString();
         Spec = dTable.Rows[0]["Specialty"].ToString();
         PID = (int) dTable.Rows[0]["PID"];

请请有人结束我令人沮丧的噩梦! 我需要程序保持并完全按原样运行,我想要做的就是我需要的任何东西,以便程序运行而不给我这些消息

再次感谢你!

1 个答案:

答案 0 :(得分:0)

一切都好,请忽略这个问题,因为我自己设法解决了这个问题!

代码中没有错误,问题出在属性选项卡设置中 这是生产它不应该的东西