数组不会将其值保持在其填充的方法之外

时间:2015-05-30 08:41:23

标签: c#

我有这行代码获取表的id并将它们提供给一个名为idPuntos的int数组(注意:这个方法夹在其他地方的Open()和Close()方法之间,所以它不是关于那个意义上的数据库)。

    public void refreshIds()
        {
        idInit.Clear();
        try
            {
            SqlCommand getIds = new SqlCommand("SELECT id_punto FROM Puntos", cnn);
            SqlDataReader idsReader = getIds.ExecuteReader();
            while (idsReader.Read())
                {
                //idInit is a global ArrayList
                idInit.Add(idsReader[0]);

                }
            //idPuntos is a global array, declared without value
            idPuntos = (int[])idInit.ToArray(typeof(int));
            //This line works here, I test printed it and got the values I wanted, yet it doesn't work in the following method...
            bajaId = idPuntos[0];

            }
        catch (SqlException)
            {
            statusbajas.Text = "Hubo un error al recuperar los datos.";
            }

        }

这不会起作用:

    private void listabajas_SelectedIndexChanged(object sender, EventArgs e)
        {
        //it doesnt work here, and i dont understand why
        bajaId = idPuntos[0];
        //statusbajas.Text = "es " + listabajas.SelectedIndex.ToString();
        }

有什么想法吗?

编辑:如果不工作,我的意思是idPuntos [0]看起来是空的,而它不在第一个,它实际上保存了我喂它的值。

编辑2:问题似乎从构造函数开始。在第一个Close()调用上设置一个断点,让我意识到从那时起就发生了崩溃。

这是我的构造函数:

    public AltasPuntos()
        {
        InitializeComponent();
        str = Properties.Settings.Default.SWMConnString;
        cnn = new SqlConnection(str);
        cnn.Open();
        refreshListNombres();
        cnn.Close();
        cnn.Open();
        refreshIds();
        cnn.Close();   
        }

1 个答案:

答案 0 :(得分:0)

您需要确保在refreshIds被解雇之前调用listabajas_SelectedIndexChanged

如果您正在使用WinForms,则可以将refreshIds调用到表单的构造函数中。

这与我在问题中提供的信息中的建议差不多。