数组不会将它的值保存在它所填充的方法之外
本文关键字:填充 方法 存在 数组 保存 | 更新日期: 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
。
这就是我从问题中提供的信息所能给出的建议。