数组不会将它的值保存在它所填充的方法之外

本文关键字:填充 方法 存在 数组 保存 | 更新日期: 2023-09-27 17:51:08

我有这行代码,它获取表的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();   
        }

数组不会将它的值保存在它所填充的方法之外

您需要确保在listabajas_SelectedIndexChanged被触发之前调用refreshIds

如果你使用的是WinForms,你可以在form的构造函数中调用refreshIds

这就是我从问题中提供的信息所能给出的建议。