0

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

我正在使用 Visual Studio 2012 并在 C# 中编码

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

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

我创建了一种填充组合框的方法,并且程序可以 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"];

请请有人结束我令人沮丧的噩梦!我需要程序按原样保持和运行,我要做的就是我需要做的任何事情,以便程序在不给我这些消息的情况下运行

再次感谢您!

4

1 回答 1

0

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

代码中没有错误问题出在属性选项卡设置中,该设置正在生成不应生成的内容

于 2013-06-06T07:59:47.760 回答